如何不对文件路径进行硬编码

时间:2015-11-03 16:26:26

标签: java javafx filepath hardcoded

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

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

3 个答案:

答案 0 :(得分:2)

您无法将JAR文件中的资源作为File实例进行访问。您只能获得InputStream

因此,以下一行

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

无法正常工作,如果稍后尝试阅读,则会抛出FileNotFoundException

假设您尝试使用DocumentBuilder解析XML文件,可以使用documentation方法:

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

getClass()返回的类中查找同一个包中的文件(当您查看文件系统时是目录)。

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

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