我有一个zip文件,里面可能包含任意数量的zip文件(也可以递归地包含)。我需要遍历其中所有的zip文件。
目前,我有一个函数,它以zipInputStream和zipFile作为参数。问题是:如果我在另一个zip文件中获得了一个zip文件,我会再次递归地调用这个函数。所以我不知道如何为另一个zip文件中的zip文件创建zipFile对象。有人能提供一种方法吗?你之前遇到过这种情况吗?
代码片段将如下所示。
目前,我有一个函数,它以zipInputStream和zipFile作为参数。问题是:如果我在另一个zip文件中获得了一个zip文件,我会再次递归地调用这个函数。所以我不知道如何为另一个zip文件中的zip文件创建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文件,我需要创建一个Document对象。所以,如果我将普通的zipInputStream传递给DocumentBuilder
中的parse()
方法,它会关闭流,我就不能再次使用它。所以我在DocumentBuilder parse()
中使用了(ZipFile object).getInputStream(currentEntryForXML)
。
FilterInputStream
以覆盖close
方法为无操作,并使用其中一个包装ZipInputStream
。 - erickson