Java Paths.get .. readAllBytes(path)) 不适用于相对路径



我是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

异常根本原因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")

但是,这是不好的做法,因为src文件夹通常不是分发包的一部分。您可能应该将Target.fxml复制到另一个位置,或者使用构建工具(如 Apache Maven)创建一个包含Target.fxml的 jar 文件,并使用ClassLoader.getResource()从 jar 文件中读取内容。

毕竟让它工作了,感谢 Fasseg 和其他人找到时间和耐心来研究这个问题。这是最终代码:

Path path = Paths.get("src/javafxapplication2/PopupFXML.fxml");
Charset charset = StandardCharsets.UTF_8;
String content = new String(Files.readAllBytes(path));
content = content.replaceAll("old_text" , "new_text");
Files.write(path, content.getBytes(charset));

最新更新