Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Рекурсивное использование ZipInputStream, как прочитать архив в архиве 
:(
    Опции темы
lazycat
Дата 19.2.2013, 19:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 227
Регистрация: 15.7.2007

Репутация: 1
Всего: 1



Доброго времени суток всем!

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

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

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

PM MAIL   Вверх
korian
Дата 19.2.2013, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 651
Регистрация: 8.3.2008
Где: Украина, Харьков

Репутация: нет
Всего: 17



Код

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();
}

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

PM   Вверх
lazycat
Дата 21.2.2013, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 227
Регистрация: 15.7.2007

Репутация: 1
Всего: 1



Цитата(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, большое спасибо !!!

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0813 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.