2

我已经查看了许多与我类似的其他问题,但不幸的是,到目前为止,他们的答案都没有奏效。

我有一个看起来像这样的 Java 项目:

我的项目/
    源/
        ABC/
            MyClass.java
        xyz/
            文件1.txt
            文件2.txt
            ...       

本质上,我正在尝试读取上面的所有 txt 文件MyClass.java。这就是我目前正在做的事情:

File dir = new File("src/xyz/");
for (File child : dir.listFiles()) {
    ...
}

这工作正常,直到我将所有内容都放入 JAR 格式,此时dir.listFiles()返回null并且上述内容不再有效。无论如何,即使将它们打包到 JAR 中,我仍然可以阅读这些 txt 文件吗?另外,如果有任何区别,我正在使用 Eclipse。

4

2 回答 2

8

您可以通过类加载器访问类路径上的文件。

getClass().getResourceAsStream("/xyz/file1.txt");

然后你会InputStream像往常一样使用。请注意,我使用绝对路径,但相对于当前包也可以。

从 Java 6 开始,还可以很容易地列出包下的所有资源:

 Enumeration urls = getClass().getClassLoader().getResources("xyz");
 urls.nextElement().openStream();
于 2013-01-21T18:46:31.037 回答
1

无论如何,即使将它们打包到 JAR 中,我仍然可以阅读这些 txt 文件吗?

鉴于您的意思是“事先不知道他们的名字”,不。

OTOH,您可以在 Jar 中的已知位置包含资源,并在其中列出可能的文本。来自根路径或类路径的路径,每行一个就可以了。使用以下内容获取资源的 URL:

URL url = this.getClass().getResource("/path/to/the.resource");
于 2013-01-21T18:49:07.867 回答