Mam prosty kod do rozpakowywania plików zip, działało dobrze, jak się spodziewałem, ale podczas testu wypróbowałem mój kod z niektórymi plikami zip (czcionki, ikony i szablony pobrane z Internet), żeby upewnić się należy wyodrębnić wszystkie pliki zip pod warunkiem, ale jej nie działa z niektórych plików zip, tutaj jest zminimalizowane kod zregenerować ten problem:ZipInputStream.getNextEntry zwraca null na niektórych plikach 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);
}
}
}
rzeczywiście moim rzeczywistej aplikacji muszę rozpakować zip pliki za pośrednictwem danych wejściowych. W powyższym kodzie próbuję wyodrębnić "janne.zip" Pobrałem ten plik z http://www.iconian.com/fonts/janne.zip Jestem w stanie wyodrębnić go za pomocą dowolnego narzędzia zip i zaskakująco poprzez metodę "unzipFile (String zipName)", ale z unzipStream (String zipName) metoda
ZipEntry ze = zis.getNextEntry();
zwraca null
Każda pomoc będzie mile widziane
Huh. To dziwne. +1 dla SSCCE i link do przykładowego pliku. –
Zamknij 'ZipFile' w swojej metodzie' unzipFile' -> [http://docs.oracle.com/javase/1.5.0/docs/api/java/util/zip/ZipFile.html#close%28%29 ] (http://docs.oracle.com/javase/1.5.0/docs/api/java/util/zip/ZipFile.html#close%28%29) – Eich
@da_re to tylko kod demonstracyjny do regeneracji problem z nullem i zamknięcie nie będą miały wpływu na problem, który próbowałem tutaj wskazać. –