1

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

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:结构如下: 图片

4

3 回答 3

2

您不能作为File实例访问 JAR 文件中的资源。你只能得到InputStream它。

因此,以下行

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

将无法正常工作,并且当稍后尝试读取它时,FileNotFoundException将抛出 a。

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

try (InputStream stream = this.getClass().getResourceAsStream("saveItem.xml")) {
    Document document = builder.parse(stream);
}
于 2015-11-03T16:35:40.993 回答
0
getClass().getResource("saveItem.xml");

在与返回的类相同的包(查看文件系统时为目录)中查找文件getClass()

确保文件在那里。还要确保在运行代码时它确实在那里,源文件夹与放置已编译类文件的targetor文件夹之间存在差异。bin

还要检查pathSource.toString()包含的内容。

于 2015-11-03T16:32:13.007 回答
0

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

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

于 2015-11-03T16:28:28.050 回答