2012-10-19 34 views
5

Dato ZipFilezip, la sua ZipEntryentry e Target FileunzippedEntryFile, qual è il modo più leggibile di scrivere entry-unzippedEntryFile?Il modo più leggibile per scrivere una ZipEntry su File?

mi si avvicinò con seguente soluzione utilizzando Google Guava e Apache.Commons.IO:

InputSupplier<ByteArrayInputStream> entryInputSupplier = ByteStreams.newInputStreamSupplier(IOUtils.toByteArray(zip.getInputStream(entry))); 
Files.copy(entryInputSupplier, unzippedEntryFile); 

Tuttavia, qualcosa mi può essere reso più semplice dice.

Grazie,
Konrad

risposta

3

Non so cosa non sia leggibile del tuo codice, a parte il fatto che hai molte chiamate annidate. Questi possono essere scomposti e assegnati a variabili locali, il che renderebbe il codice più lungo (ma, a mio parere, un po 'più leggibile).

Sembra che i dati vengano elaborati due volte: una volta per leggerlo in un array di byte e nuovamente per copiarlo nel file. Non ho ancora testato questo, ma dovrebbe funzionare e tagliare la quantità di spostamento dei dati a metà:

final InputStream zipStream = zip.getInputStream(entry); 
InputSupplier<InputStream> supplier = new InputSupplier<InputStream>() { 
    InputStream getInput() { 
     return zipStream; 
    } 
}; 
Files.copy(supplier, unzippedEntryFile); 

Si potrebbe, infatti, creare il proprio piccolo classe che implementa InputSuppler<InputStream>. Sono sorpreso di non averne trovato uno nella biblioteca di Guava. (Apparentemente, others have been surprised at this as well.)

+0

Per "leggibile" intendevo anche concisi, quindi volevo evitare di creare una nuova classe anonima e in generale ho creduto che fosse possibile effettuare meno chiamate per ottenere lo stesso risultato. –

1

Ecco un collegamento rapido che potrebbe avere tutti i possibili scenari per Zip file operation. Se è un'operazione di file semplice, ecco il tutorial di Sun. Sono sicuro che ci sono molte API open source. Ecco il link a IO tutorial. Cheers

Problemi correlati