直接读取Zip文件中的文件 - Java

Adi*_*dil 5 java zip zipfile

我的情况是我有一个包含一些文件(txt,png,...)的zip文件,我想直接用它们的名字来读它,我测试了下面的代码但没有结果(NullPointerExcepion):

InputStream in = Main.class.getResourceAsStream("/resouces/zipfile/test.txt");
BufferedReader br = new BufferedReader(new InputStreamReader(in, "UTF-8"));
Run Code Online (Sandbox Code Playgroud)

resources是一个包,zipfile是一个zip文件.

Mar*_*lis 15

如果您可以确定您的zip文件永远不会被打包到另一个jar中,您可以使用以下内容:

URL zipUrl = Main.class.getResource("/resources/zipfile.zip");
URL entryUrl = new URL("jar:" + zipUrl + "!/test.txt");
InputStream is = entryUrl.openStream();
Run Code Online (Sandbox Code Playgroud)

要么:

URL zipUrl = Main.class.getResource("/resources/zipfile.zip");
File zipFile = new File(zipUrl.toURI());
ZipFile zip = new ZipFile(zipFile);
InputStream is = zip.getInputStream(zip.getEntry("test.txt"));
Run Code Online (Sandbox Code Playgroud)

否则,您的选择是:

  • 对于需要加载的每个条目,使用ZipInputStream扫描zip文件一次.如果您拥有大量资源,这可能会很慢,除非您可以为所有资源重用相同的ZipInputStream.
  • 不要将资源打包到嵌套的zip文件中,只需使用代码在jar中内嵌它们.
  • 将嵌套的zip文件复制到临时目录中,然后使用ZipFile类访问它.

  • +1,使用ZipFile类直接获取条目比扫描整个流更有效. (2认同)