读取jar中的txt文件

时间:2013-01-21 18:45:13

标签: java file resources embedded-resource

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

我有一个看起来像这样的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。

2 个答案:

答案 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");