如何在不创建任何新文件的情况下访问zip文件中目录中的文件?

时间:2012-08-02 16:44:01

标签: java zip unzip zipfile

我正在开发一个java项目,要求我访问多个嵌入式zip文件和目录中的文件。

例如,archive1.zip/archive1/archive2.zip/archive2/directory1/file_that_I_need.txt。

如果提取每个zip文件,它会立即列出其内容,但是内部的文件夹包含所有内容,这将会容易得多。

我在网上找到的例子处理的是zip文件,它们在解压缩时包含了他们需要访问的文件,但是我找不到任何处理zip文件目录中的文件。对此的任何建议都会很棒。

谢谢!

2 个答案:

答案 0 :(得分:1)

鉴于禁止创建新文件,你几乎被ZipInputStream困住了。当您找到与嵌入式存档对应的ZipEntry时,您可以读取其流以查找实际文件。您可以根据需要递归处理多个级别的归档。

如果您要处理单个文件,这可以正常工作。但是,重新读取多个文件的存档可能很昂贵。更好的解决方案是至少打开外部存档作为ZipFile,内存映射实际文件。

如果您可以将包含的存档提取到一个临时目录中并将其打开为ZipFile,那么您可能会看到速度大幅提升(只要您从每个嵌入的文件中提取多个文件)记录)。

答案 1 :(得分:0)

您可能还会看http://truezip.java.net/我使用过它的旧版本,它比Java内置的支持功能强大得多。我认为还有一个Apache Commons库,用于从嵌套的归档结构中读取文件。