ZipFile中的java ZipFile
我有一个zip文件,里面可以包含任意数量的ZipFile(也可以递归)。我需要重复所有这些
现在,我有一个以zipInputStream和zipFile为参数的函数。问题是;如果我在另一个zip中得到一个zip,我将再次递归调用这个函数。所以我不知道如何在另一个zipFile中为zipFile创建zipFile对象。有人能建议一种方法吗?你以前见过这个吗
片段将如下所示
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文件,我需要创建一个文档对象。因此,如果我在DocumentBuilder
中为parse()
方法传递正常的zipInputStream,它将关闭流,并且我无法再次使用它。所以我用了(ZipFile object).getInputStream(currentEntryForXML)
内部DocumentBuilder parse().
# 1 楼答案
无法在存档中为zip文件创建ZipFile。但是为什么你的方法中需要这个论点呢?如果你只需要一个流,就用你的参数zInpStream作为contstructor参数,比如
打电话给zInpStream之后。GetNextery()zInpStream已经位于该条目的开头,在调用GetNextery()之前,它将只读取该条目
编辑。看到你的编辑了。似乎,如果你阻止关闭流,这对你来说就足够了。只需使用稍加修改的FilterInputStream,它将close()调用委托给zipInputStream中的closeEntry(),而不是close
并在checkZip中创建此防护: