Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Рекурсивное использование ZipInputStream


Автор: lazycat 19.2.2013, 19:55
Доброго времени суток всем!

Вопрос совершенное не из практической плоскости, скорее он для "...пренебрегающих презренной пользой, единого прекрасного жрецов".

Есть zip-архив, в котором содержится файл, также представляющий собой zip-архив. Надо прочитать данные из вложенного zip-архива.
Решение "в лоб" очевидно: прочитать zip-файл из архива, сохранить на диске, потом открыть с помощью ZipFile и снова прочитать содержимое. 
Но большинство с негодованием отвергнут такое решение. Надо найти ZipEntry, связать с ним поток, сделать поток ZipInputStream, снова найти нужный ZipEntry и прочитать его.
Но тут возникает проблема, как получить ZipFile для файла которого нет?

Одним словом, надеюсь, что возникнет дискуссия для эстетов от программирования.

Автор: korian 19.2.2013, 20:44
Код

ZipFile file = new ZipFile("external.zip");
ZipEntry entry = file.getEntry("internal.zip") ;
InputStream internalStream = file.getInputStream(entry);
ZipInputStream internalZipStream = new ZipInputStream(internalStream);
while(тут надо какую-то проверку) {
    ZipEntry internalEntry = internalZipStream.getNextEntry();
    internalZipStream.read(...); //читаем entry
    internalZipStream.closeEntry();
}

Поидее где-то так. Не проверял и не компилил. Чисто по докам написано.

Автор: lazycat 21.2.2013, 17:55
Цитата(korian @  19.2.2013,  20:44 Найти цитируемый пост)
    ZipEntry internalEntry = internalZipStream.getNextEntry();
    internalZipStream.read(...); //читаем entry


Интересное решение, но почему после получения ZipEntry поток ZipStream должен оказаться связанным именно с этой Entry? Вобще-то это логично, но где это написано?

Добавлено через 3 минуты и 57 секунд
Цитата(lazycat @  21.2.2013,  17:55 Найти цитируемый пост)
но где это написано?


Прошу прощения за дурацкий вопрос, конечно же именно в доке это и написано. Человеку свойственно игнорировать то, что лежит у него перед глазами. 

korian, большое спасибо !!!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)