从 jar 读取文本文件



我无法从罐子内读取文本文件。我在解压缩时管理了它,但现在我已经存档了它,它将无法正常工作。罐子有:

  • BTA.jar
    • 飞溅.class
    • *。.class
    • 飞溅.txt
    • 等。。

现在,目前我正在使用BufferedReader和FileReader。

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

但是通过谷歌搜索我知道这只能从罐子外面读取文件。

我的问题是:如何从罐子内读取文件?

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

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

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

传递给

方法的路径格式的规则在这里定义,在 Class 类的 javadoc 中。

问题是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")) {....

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);
            }
        }
    }
}

最新更新