При распаковке zip-файла появляется сообщение «java.util.zip.ZipException: не удается прочитать версию» или «java.util.ZipException не удается прочитать локальный заголовок версии 45». - PullRequest
3 голосов
/ 22 августа 2011

Я хотел бы просто извлечь обычный zip-файл, но он не работает.Это мой код, который я сейчас использую:

private File downloadPath = new File(Environment.getExternalStorageDirectory() + "/Test/file.zip");
private File unzipLoc = new File(Environment.getExternalStorageDirectory() + "/Test/");
        FileInputStream fin = new FileInputStream(downloadPath); 
        ZipInputStream zin = new ZipInputStream(fin);
        ZipEntry ze = null; 
        while ((ze = zin.getNextEntry()) != null) 
        { 
            FileOutputStream fout = new FileOutputStream(unzipLoc + ze.getName()); 
            for (int c = zin.read(); c != -1; c = zin.read()) 
            { 
                fout.write(c); 
            } 

            zin.closeEntry(); 
            fout.close(); 
        } 
        zin.close(); 

Сбой в части 'zin.getNextEntry ()'.Ошибка: java.util.zip.ZipException: не удается прочитать версию Есть идеи?Thx!

Ответы [ 2 ]

5 голосов
/ 22 августа 2011

Похоже, что ваш zip-файл новее, чем ваша "разархивирующая библиотека".

Если вы читаете источник:

ZipInputStream (найдите new ZipException(«Невозможно прочитать версию») )

Показывает, что проверяет версию zip-файлов.Затем, глядя на Wikipedia , вы увидите, что это минимальная версия, необходимая для извлечения zip-файла.

Проверьте ваш zip-файл и повторно сохраните его с более низкой версией вашего zip-программного обеспечения /Застегните его снова без сжатия для проверки

Поочередно обновите свою Zip-библиотеку (которую вы не можете сделать, используя внутреннюю zip-библиотеку Android).

4 голосов
/ 22 марта 2013

Просто чтобы добавить к вышеупомянутым ответам решение проблемы и почему она была создана в моем случае. Да Особая благодарность мистеру Бангла и мистеру Блунделлу за помощь в быстром понимании и решении проблемы.

Я столкнулся с этим исключением, заявив, что "java.util.ZipException не может прочитать локальный заголовок версии 45", когда я распаковывал файлы на SDCard. ZIP-файл был загружен с сервера DOT NET, и сервер использовал библиотеку SharpZipLib для распаковки файлов. Из исключения это ясно означает, что библиотеки архивации и разархивирования имеют другую версию.

Решение:

В основном библиотека SharpZipLib использует Zip64 (расширенный формат zip-файла для архивирования файлов), что несовместимо с пакетом java.util.zip, доступным в Android и в версиях Java до 7.

Таким образом, если вы переключите Zip64 на сервер, который архивирует файлы, он станет совместимым с пакетом android java.util.zip и будет легко разархивирован. Если вы добавите следующую строку на сервер, это решит вашу проблему:

ZipOutputStream.UseZip64 = UseZip64.Off 
...