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

标签 java javafx relative-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 文件中读取内容.

关于Java Paths.get .... readAllBytes(path)) 不适用于相对路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41275278/

相关文章:

java - 关闭数据库连接后从 Oracle DB 读取 CLOB

java - 无法读取文档 : Expected type float, 整数或字符串

Java 11/JavaFX 11/Module Deployment Mess(可运行的 Jar,如果单击则有效,但如果从命令行运行则无效)

javascript - JavaScript 文件中的 URL 是相对于 JavaScript 位置还是浏览器?

perl - 如何从相对路径中获取 Perl 程序的绝对路径?

java - 字符编码过滤器,韩文字符编码问题

java - 使用Json访问特定属性

java - 如果收到 HTTP 错误 403,如何从 JavaFx 中的 URL 加载图像

gradle - 从 Gradle 项目运行可执行文件时在 JavaFX 中捆绑?

php - 为什么许多 PHP 开发人员使用 "__DIR__ . ' ../otherFolder'"?