Чтение ZIP-файла дает исключение «недопустимый заголовок LOC» - PullRequest
2 голосов
/ 27 сентября 2010

У меня большой zip-файл, 4.3G. Он содержит около 100 тыс. Записей. Я читаю его, используя Java 1.6.0_14 в Linux, 32-битную Ubuntu, и получаю следующее исключение.

java.util.zip.ZipException: invalid LOC header (bad signature)
        at java.util.zip.ZipFile.read(Native Method)
        at java.util.zip.ZipFile.access$1200(ZipFile.java:29)
        at java.util.zip.ZipFile$ZipFileInputStream.read(ZipFile.java:447)
        at java.util.zip.ZipFile$1.fill(ZipFile.java:230)
        at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:141)
        at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
        at java.io.BufferedInputStream.read1(BufferedInputStream.java:258)
        at java.io.BufferedInputStream.read(BufferedInputStream.java:317)
        at java.io.FilterInputStream.read(FilterInputStream.java:90)

У меня нет проблем с другими файлами ZIP (код для их обработки довольно зрелый), и я подтвердил, что могу правильно разархивировать файл ZIP из командной строки, используя команду unzip.

Есть какие-нибудь подсказки? Спасибо!

Ответы [ 2 ]

6 голосов
/ 27 сентября 2010

Zip-файлы размером более 4 ГБ требуют, чтобы программа чтения zip-файлов поддерживала расширения ZIP64 с помощью PKWARE.

До Java 6 эта поддержка недоступна в классах java.util.zip и имееттолько недавно был добавлен в Java 7 (само собой разумеется, что это не релиз GA, на момент написания этой статьи).

Ссылка:

  1. ПоддержкаZIP64 в Java 7 был добавлен
3 голосов
/ 27 сентября 2010

Как уже упоминалось, файлы размером более 4 ГБ не поддерживаются стандартом ZIP. Существует расширение под названием ZIP64 , которое решает эту проблему, но оно не будет поддерживаться до Java 7.

Существует ряд библиотек, которые поддерживают ZIP64, но когда я в последний раз проверял, ни одна из них не поддерживала потоки, а использовала файлы. Если вас это не беспокоит, TrueZip может работать нормально.

Если вы имеете дело с потоками, вам придется использовать временные файлы.

...