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;
}
}
Może Apache Commons Kompresja może tu pomóc? Wbudowana implementacja zip nie jest najlepsza, o ile wiem. – biziclop
Istnieje ograniczenie rozmiaru w domyślnej implementacji zip. Możesz znaleźć tę [odpowiedź] (http://stackoverflow.com/a/6738811/1048330) przydatne. – tenorsax