复制与以下示例程序相同的方案。
我正在尝试读取位于类文件夹之外的文件events
。我使用Test.txt
方法查找文件,但它无法识别。只要我的文件在classes文件夹中,它就会识别出来。
getResourceAsStream
无法识别外部类文件夹
识别类文件夹结构内是否有任何内容
答案 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);