2012-04-10 10 views
8

Próbuję otworzyć plik ZIP w języku JAVA. poniżejBardzo duży plik zip (> 50 GB) -> ZipException: nieprawidłowy nagłówek CEN

Kod działa poprawnie z wyjątkiem niektórych dużych plików w tym przypadku pojawia się następujący wyjątek:

Exception in thread "main" java.util.zip.ZipException: invalid CEN header (bad signature) 
at java.util.zip.ZipFile.open(Native Method) 
at java.util.zip.ZipFile.<init>(ZipFile.java:114) 
at java.util.zip.ZipFile.<init>(ZipFile.java:75) 

Czy jest to znany błąd? Czy może to być spowodowane wyższym poziomem kompresji, który nie jest obsługiwany w JAVA?

Zauważ, że nie mogę użyć Winzip do zdekompresowania pliku, a gzip pod Linux-em daje błąd dotyczący długości danych (nieskompresowany plik to około 80 GB). Aby go zdekompresować, musiałem użyć poniższego obejścia:

gunzip -S .zip <file.zip> file 

Wszelkie pomysły będą bardzo pomocne.

Kod:

if (file.getExtension().equals("gz")) { 
    br = new BufferedReader(new InputStreamReader(new GZIPInputStream(new FileInputStream(name)))); 
} 
else if (file.getExtension().equals("zip")) { 
    ZipFile zipFile = new ZipFile(name); // <-------------------FAILS HERE 
    Enumeration<? extends ZipEntry> entries = zipFile.entries(); 
    while (entries.hasMoreElements()) { 
     ZipEntry zipEntry = entries.nextElement(); 
     System.out.println("ZIP File in the archive:" + zipEntry.getName()); 
     br = new BufferedReader(new InputStreamReader(zipFile.getInputStream(zipEntry))); 
     break; 
    } 
} 
+1

Może Apache Commons Kompresja może tu pomóc? Wbudowana implementacja zip nie jest najlepsza, o ile wiem. – biziclop

+2

Istnieje ograniczenie rozmiaru w domyślnej implementacji zip. Możesz znaleźć tę [odpowiedź] (http://stackoverflow.com/a/6738811/1048330) przydatne. – tenorsax

Odpowiedz

Powiązane problemy