У меня есть zip-файл, который может содержать любое количество zip-файлов внутри (также рекурсивно). Мне нужно перебрать их все.
Прямо сейчас у меня есть функция, которая принимает zipInputStream и zipFile в качестве параметров. Проблема в; если я получаю почтовый индекс внутри другого почтового индекса, я снова вызываю эту функцию рекурсивно. Поэтому я не знаю, как создать объект zipFile для zipfiles внутри другого 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
}
}
РЕДАКТИРОВАТЬ: Мне нужен этот объект почтового файла, потому что. Если я сталкиваюсь с файлом XML, мне нужно создать объект Document. Поэтому, если я передаю обычный метод zipInputStream для метода parse()
в DocumentBuilder
, он закрывает поток и я не могу использовать его снова. Так что я использовал (ZipFile object).getInputStream(currentEntryForXML)
внутри DocumentBuilder parse().