问题描述
异常根本原因java.nio.file.NoSuchFileException: Target.fxml
确实意味着该文件在给定位置不存在。
如果您正在这样做Paths.get("Target.fxml")
,则需要在当前工作目录中查找该文件Target.fxml
。但是由于该文件位于src/javafxapplication/Target.fxml
并且程序是从其他目录运行的,Target.fxml
因此找不到。
您可以使用以下方法检查应用程序的工作目录:
System.out.println(System.getProperty("user.dir")));
这很可能是classes
目录。例如,如果要指向classes
该src
文件夹,则可以使用以下路径:
Paths.get("../src/javafxapplication/Target.fxml")
您可能应该将其复制Target.fxml
到另一个位置,或使用诸如Apache
Maven之类的构建工具来创建一个包含的jar文件,并使用Target.fxml
读取jar文件中的内容ClassLoader.getResource()
。
解决方法
我是Java的新手,正在尝试构建FX应用程序。我的功能之一是用其他字符串替换某些字符串。只要我定义目标文件的绝对路径,脚本就可以正常工作,但是当我使用相对路径时,脚本就会中断。
问题出在方法“ readAllBytes”中,该方法仅适用于完整路径。但是我需要相对路径,因为文件夹位置会有所不同。
目标文件在项目文件夹中。是否可以使用其他方法读取文件内容,而无需绝对路径?
非常感谢。以下是代码段:
if (checkbox.isSelected()) {
//this works .....
Path path = Paths.get("//home/../../../../Target.fxml")
Charset charset = StandardCharsets.UTF_8;
String content = new String(Files.readAllBytes(path));
content = content.replaceAll("text_old","text_new");
Files.write(path,content.getBytes(charset));
//this doesn't work...
Path path = Paths.get("Target.fxml");
Caused by: java.nio.file.NoSuchFileException: Target.fxml