2015-11-03 141 views
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:结构如下: image

+0

您是从一个罐子或从IDE中运行呢? – RealSkeptic

回答

2

您无法访问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); 
} 
0

简短的回答 - saveItem.xml是不是在classpath中。 如果它是一个Web应用程序,那么文件可能会被添加到WEB-INF/classes文件夹中。

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

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

会在同一个包中的文件(该文件是目录,当你在文件系统)作为类getClass()回报。

确保文件在那里。当你运行代码时,确保它真的在那里,你的源文件夹和放置已编译的类文件的文件夹targetbin之间是有区别的。

另请检查pathSource.toString()包含的内容。

+1

检查编辑的结构,谢谢! –