我已经看过很多与我类似的问题了,但不幸的是,到目前为止,他们的答案都没有。
我有一个看起来像这样的Java项目:
MyProject/ src/ abc/ MyClass.java xyz/ file1.txt file2.txt ...
基本上,我正在尝试阅读上面MyClass.java
中的所有txt文件。这就是我目前正在做的事情:
File dir = new File("src/xyz/");
for (File child : dir.listFiles()) {
...
}
这一切正常,直到我将所有内容都放入JAR格式,此时dir.listFiles()
返回null
,上述内容不再有效。无论如何,即使它们被打包到JAR中,我仍然可以读取这些txt文件吗?另外,如果它有任何不同,我正在使用Eclipse。
答案 0 :(得分:8)
您可以通过类加载器访问类路径中的文件。
getClass().getResourceAsStream("/xyz/file1.txt");
然后你会像往常一样使用InputStream
。请注意,我使用绝对路径,但相对于当前包也适用。
从Java 6开始,也可以很容易地列出包下的所有资源:
Enumeration urls = getClass().getClassLoader().getResources("xyz");
urls.nextElement().openStream();
答案 1 :(得分:1)
无论如何,即使将这些txt文件打包到JAR中,我仍然可以读取这些文件吗?
鉴于你的意思是'事先不知道他们的名字'否。
OTOH您可以在Jar中的已知位置包含资源,并列出其中的可能文本。从根或类路径的路径,每行一个将很好地工作。使用以下内容获取资源的URL:
URL url = this.getClass().getResource("/path/to/the.resource");