2012-04-10 8 views
8

Sto tentando di aprire un file ZIP in JAVA.File zip di grandi dimensioni (> 50 GB) -> ZipException: intestazione CEN non valida

Il codice sotto funziona bene tranne che con alcuni file di grandi dimensioni, nel qual caso ottengo la seguente eccezione:

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) 

C'è un bug noto? Può essere dovuto al livello di compressione più alto non supportato in JAVA?

Nota che non posso usare Winzip per decomprimere il file, e gzip sotto Linux dà un errore sulla lunghezza dei dati (il file non compresso è di circa 80 GB). Ho dovuto utilizzare la seguente soluzione per decomprimerlo:

gunzip -S .zip <file.zip> file 

Qualsiasi idea sarebbe molto molto utile.

Codice:

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

Forse Apache Commons compressione può aiutare qui? L'implementazione di zip integrata non è la migliore per quanto ne so. – biziclop

+2

Esiste un limite di dimensioni nell'implementazione zip predefinita. Potresti trovare questa [risposta] (http://stackoverflow.com/a/6738811/1048330) utile. – tenorsax

risposta