2016-01-22 89 views
1

复制与以下示例程序中相同的场景。读取JAR文件外部的属性文件 - java 8不识别文件

我想读取位于我的classes文件夹外部的文件Test.txt。我使用getResourceAsStream方法来定位文件,但它不能识别。只要我的文件在它识别的classes文件夹内。

InputStream propFileInpStream = LocateFile.class.getResourceAsStream("../../../"+PROP_FILE); 

不承认,如果外面的类文件夹

enter image description here

认识到,如果在类文件夹结构的任何地方

enter image description here

回答

0

谢谢大家的帮助,我刚刚更换线路

的InputStream propFileInpStream = LocateFile.class.getResourceAsStream( “.. \\” + PROP_FILE);

与如下改变

的InputStream propFileInpStream =新的FileInputStream(” ..\\“+ PROP_FILE);

0

LocateFile.class.getResourceAsStream将寻找在类路径中的文件。

如果您需要访问类路径之外的文件,则可以将该文件的位置添加到类路径或使用绝对路径并使用this thread to read it as a stream的建议。

2

这是正常的和完全预期的。

​​试图找到具有给定名称的资源,而不是任意文件。资源是存在于应用程序的类路径中的文件。如果该文件不在类路径中,则不能使用该方法从中检索InputStream

你可以做的是使用Java NIO.2 APIFiles.newInputStream(path)帮助:

打开文件,并返回一个输入流从文件中读取。

此方法将打开一个文件(而不是资源)进行读取。您可以使用静态工厂Paths.get(first, more...)获得Path实例。您可以给文件的绝对路径或相对于jar文件位置的路径。

示例代码:

try (InputStream propFileInpStream = Files.newInputStream(Paths.get(path))) { 
    // do something with the input stream 
} 
0

您需要的类路径以外的事情采取不同的方式。您可能需要向JVM询问您的类的字节码是以物理方式存储的,然后从那里导航到您需要的文件。请注意,当类文件存储在jar文件中时,这会起到不同的作用。

http://www.exampledepot.com/egs/java.lang/ClassOrigin.html:(旧链接)

// Get the location of this class 
Class cls = this.getClass(); 
ProtectionDomain pDomain = cls.getProtectionDomain(); 
CodeSource cSource = pDomain.getCodeSource(); 
URL loc = cSource.getLocation(); // file:/c:/almanac14/examples/