从jar中读取文本文件

时间:2014-04-11 01:16:20

标签: java file text jar

我无法从jar中读取文本文件。我在解压缩的同时对它进行了管理,但现在我已将其归档,但它已经无法正常工作。 罐子有:

  • BTA.jar
    • Splash.class
    • *。类
    • Splash.txt
    • 等。

现在,我正在使用BufferedReader和FileReader

 f = new FileReader("Splash.txt");
 in = new BufferedReader(f);

但是从google搜索我知道只能从jar外部读取文件。

我的问题是:如何从jar中读取文件?

3 个答案:

答案 0 :(得分:2)

假设您正在执行BTA.jar,则可以使用

InputStream in = YourClass.class.getResourceAsStream("/Splash.txt");

检索InputStream并通过BufferedReader将其传递给InputStreamReader

传递给方法的路径格式规则在Class类的javadoc中定义here

答案 1 :(得分:0)

问题是Splash.txt不是一个文件,它的一系列字节位于一个(轻度)压缩文件中,该文件在Jar / Zip标准规定的目录中有一个命名条目。

此测量可以使用FileReader来读取文件,而是需要通过Class资源管理API访问它,例如..

getClass().getResourceAsStream("/Splash.txt");

或者,如果您尝试从static上下文

中读取它
Splash.class.getResourceAsStream("/Splash.txt");

不要忘记,你有责任在完成后关闭InputStream,例如......

try (InputStream is = getClass().getResourceAsStream("/Splash.txt")) {....

答案 2 :(得分:0)

jar只是一个zip文件,可以像这样阅读..

ZipFile file = new ZipFile("/home/Desktop/myjar.jar");
Enumeration<? extends ZipEntry> entries = file.entries();

while (entries.hasMoreElements()) {
    ZipEntry entry = entries.nextElement();

    if (entry.getName().startsWith("splash")) {
        try (BufferedReader reader = new BufferedReader(new InputStreamReader(file.getInputStream(entry)))) {
            String line = null;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
        }
    }
}