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