Java Paths.get…readAllBytes(path))无法使用相对路径

问题描述

异常根本原因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目录。例如,如果要指向classessrc文件夹,则可以使用以下路径:

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

猜你在找的技术问答相关文章

如何检查配对的蓝牙设备是打印机还是扫描仪(Android)
是否允许实体正文进行HTTP DELETE请求?
如何将ZipInputStream转换为InputStream?
java.util.logging Java 8中的变量
PowerMockito.doReturn返回null
Java中的RESTful调用
Swing / Java:如何正确使用getText和setText字符串
特殊字符和重音字符
Android Studio中的ndk.dir错误
错误“找不到主类”