读取JAR文件外的属性文件 - java 8无法识别文件

时间:2016-01-22 09:45:01

标签: java path java-8 filepath

复制与以下示例程序相同的方案。

我正在尝试读取位于类文件夹之外的文件events。我使用Test.txt方法查找文件,但它无法识别。只要我的文件在classes文件夹中,它就会识别出来。

getResourceAsStream

无法识别外部类文件夹

enter image description here

识别类文件夹结构内是否有任何内容

enter image description here

4 个答案:

答案 0 :(得分:2)

这是正常的,完全可以预期的。

Class.getResourceAsStream(name)尝试查找具有给定名称的资源,而不是任意文件。资源是存在于应用程序的类路径中的文件。如果该文件不在类路径中,则无法使用该方法从中检索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
}

答案 1 :(得分:0)

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

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

答案 2 :(得分: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/

答案 3 :(得分:0)

感谢大家的帮助,我刚刚更换了一行

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

通过以下更改:

InputStream propFileInpStream = new FileInputStream("..\\\\"+PROP_FILE);