ZipInputStream.getNextEntry возвращает ноль в некоторых файлах zip
У меня есть простой код для извлечения zip-файлов, он работал нормально, как и ожидалось, но во время теста я попробовал свой код с некоторыми zip-файлами (шрифты, значки и шаблоны, которые я скачал из Интернета), просто чтобы убедиться, что он должен извлечь любые zip-файлы при условии, что он не работает с некоторыми файлами zip, вот минимизированный код для восстановления этой проблемы:
package com.test.mytest;
import java.io.FileInputStream;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipInputStream;
public class ZipExtractTest {
public static final String ZIP_FILE = "/Users/XXXXX/Downloads/janne.zip";
public static void main(String[]args) {
unzipFile(ZIP_FILE);
unzipStream(ZIP_FILE);
}
public static void unzipFile(String zipName) {
try {
ZipFile zf = new ZipFile(zipName);
Enumeration ent = zf.entries();
while(ent.hasMoreElements()) {
System.out.println(ent.nextElement());
}
} catch(Exception e) {
System.out.println(e);
}
}
public static void unzipStream(String zipName) {
try {
ZipInputStream zis = new ZipInputStream(new FileInputStream(zipName));
ZipEntry ze = zis.getNextEntry();
if(ze == null) {
System.out.println("unable to get first entry from zip file");
zis.close();
return;
}
while(ze != null) {
System.out.println("Entry Found: " + ze);
ze = zis.getNextEntry();
}
zis.closeEntry();
zis.close();
} catch(Exception e) {
System.out.println(e);
}
}
}
на самом деле в моем реальном приложении я должен извлечь zip-файлы с помощью inputsreams. В приведенном выше коде я пытаюсь извлечь "janne.zip» Я скачал этот файл сhttp://www.iconian.com/fonts/janne.zip Я могу извлечь его с помощью любого zip-инструмента и на удивление черезunzipFile (String zipName) " метод, но с помощью метода unzipStream (String zipName)
ZipEntry ze = zis.getNextEntry();
возвращает ноль
любая помощь будет оценена