【发布时间】:2009-10-01 05:52:04
【问题描述】:
我有一个 zip 文件,其中可以包含任意数量的 zipfile(也可以递归)。我需要遍历所有这些。
现在,我有一个以 zipInputStream 和 zipFile 作为参数的函数。问题是;如果我在另一个 zip 中得到一个 zip,我将再次递归调用此函数。所以我不知道如何在另一个 zipfile 中为 zipfiles 创建一个 zipFile 对象。有人可以建议一种方法吗?你以前有没有遇到过这种情况。
sn-p 看起来像这样。
private void checkZIP(ZipInputStream zInpStream, ZipFile zf) {
try {
ZipEntry zipEntry = zInpStream.getNextEntry();
while (zipEntry != null) {
String entryName = zipEntry.getName();
if(entryName.endsWith(".zip"))
checkZIP(new ZipInputStream(zf.getInputStream(zipEntry)),<NEW ZIPFILE OBJECT FOR THIS ENTRY>);
//other files parsing apart from zip.
zInpStream.closeEntry();
zipEntry = zInpStream.getNextEntry();
}
zInpStream.close();
} catch(Exception ioe) {
//catching specific exceptions here. But did not want to put al
}
}
编辑:我需要那个 zip 文件对象,因为。如果我遇到一个 XML 文件,我需要创建一个 Document 对象。因此,如果我在DocumentBuilder 中为parse() 方法传递正常的 zipInputStream,它会关闭流并且我无法再次使用它。所以我在DocumentBuilder parse().里面使用了(ZipFile object).getInputStream(currentEntryForXML)
【问题讨论】:
-
然后扩展
FilterInputStream以将close方法覆盖为空操作,并用其中之一包装ZipInputStream。 -
当心 - 可以(并且已经完成)创建递归压缩文件:steike.com/code/useless/zip-file-quine
-
是的,我会小心的..非常感谢