读取JAR文件外部的属性文件 - java 8不识别文件
复制与以下示例程序中相同的场景。读取JAR文件外部的属性文件 - java 8不识别文件
我想读取位于我的classes文件夹外部的文件Test.txt
。我使用getResourceAsStream
方法来定位文件,但它不能识别。只要我的文件在它识别的classes文件夹内。
InputStream propFileInpStream = LocateFile.class.getResourceAsStream("../../../"+PROP_FILE);
不承认,如果外面的类文件夹
认识到,如果在类文件夹结构的任何地方
谢谢大家的帮助,我刚刚更换线路
的InputStream propFileInpStream = LocateFile.class.getResourceAsStream( “.. \\” + PROP_FILE);
与如下改变
的InputStream propFileInpStream =新的FileInputStream(” ..\\“+ PROP_FILE);
LocateFile.class.getResourceAsStream
将寻找在类路径中的文件。
如果您需要访问类路径之外的文件,则可以将该文件的位置添加到类路径或使用绝对路径并使用this thread to read it as a stream的建议。
这是正常的和完全预期的。
试图找到具有给定名称的资源,而不是任意文件。资源是存在于应用程序的类路径中的文件。如果该文件不在类路径中,则不能使用该方法从中检索InputStream
。
你可以做的是使用Java NIO.2 API与Files.newInputStream(path)
帮助:
打开文件,并返回一个输入流从文件中读取。
此方法将打开一个文件(而不是资源)进行读取。您可以使用静态工厂Paths.get(first, more...)
获得Path
实例。您可以给文件的绝对路径或相对于jar文件位置的路径。
示例代码:
try (InputStream propFileInpStream = Files.newInputStream(Paths.get(path))) {
// do something with the input stream
}
您需要的类路径以外的事情采取不同的方式。您可能需要向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/