如何不硬编码文件路径

How to not hard-code a file path

我想使用此实现计算放入源包中的文件的路径:

URL pathSource = this.getClass().getResource("saveItem.xml");

当我尝试像下面的代码一样创建一个新文件时:

File xmlFile = new File(pathSource.toString());

我尝试用它来创建这样的文档:

Document document = builder.parse(xmlFile);

这给我java.io.FileNotFoundException。 如何在不硬编码的情况下计算文件路径?

PS: 我已经使用了 pathSource.getPath() 但它也不起作用。 我想使用类似的实现:

FXMLLoader loader = new FXMLLoader(getClass().getResource("FXMLDocument.fxml"));

PPS: 结构如下:

简答 - saveItem.xml 不在类路径中。 如果它是 Web 应用程序,则文件可能会添加到 WEB-INF/classes 文件夹。

编辑: 也试试 this.getClass().getResourceAsStream()

getClass().getResource("saveItem.xml");

在与 getClass() returns.

的 class 相同的包(当您查看文件系统时是目录)中查找文件

确保文件在那里。当您 运行 您的代码时,还要确保它确实存在于其中,源文件夹与放置已编译 class 文件的 targetbin 文件夹之间存在差异。

同时检查 pathSource.toString() 包含的内容。

您无法访问 JAR 文件中作为 File 实例的资源。你只能得到一个InputStream

因此,下面一行

File xmlFile = new File(pathSource.toString());

将无法正常工作,稍后尝试读取它时,将抛出 FileNotFoundException

假设您尝试使用 DocumentBuilder 解析 XML 文件,您可以使用 parse(InputStream) 方法:

try (InputStream stream = this.getClass().getResourceAsStream("saveItem.xml")) {
    Document document = builder.parse(stream);
}