2011-12-03 17 views
5

Sto provando a convertire una matrice di byte in un file ZIP. Ho avuto byte utilizzando il seguente codice:Come convertire array di byte in file ZIP

byte[] originalContentBytes= new Verification().readBytesFromAFile(new File("E://file.zip")); 

private byte[] readBytesFromAFile(File file) { 
    int start = 0; 
    int length = 1024; 
    int offset = -1; 
    byte[] buffer = new byte[length]; 
    try { 
     //convert the file content into a byte array 
     FileInputStream fileInuptStream = new FileInputStream(file); 
     BufferedInputStream bufferedInputStream = new BufferedInputStream(
       fileInuptStream); 
     ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); 

     while ((offset = bufferedInputStream.read(buffer, start, length)) != -1) { 
      byteArrayOutputStream.write(buffer, start, offset); 
     } 

     bufferedInputStream.close(); 
     byteArrayOutputStream.flush(); 
     buffer = byteArrayOutputStream.toByteArray(); 
     byteArrayOutputStream.close(); 
    } catch (FileNotFoundException fileNotFoundException) { 
     fileNotFoundException.printStackTrace(); 
    } catch (IOException ioException) { 
     ioException.printStackTrace(); 
    } 

    return buffer; 
} 

Ma il mio problema ora è con la conversione l'array di byte di nuovo in un file ZIP - come può essere fatto?

Nota: lo ZIP specificato contiene due file.

+0

Che cosa vuoi esattamente? Vuoi riportare i byte sul disco in un file zip? O vuoi leggere il contenuto? I byte come li leggi non sono ancora decodificati. – morja

+0

@ morja -> sì voglio riportare i byte sul disco sotto forma di file zip. – Mohan

+0

Bene, ma poi scrivi nuovamente i byte su disco con FileOutputStream e dai il nome al file .zip. Non vuoi scrivere i file estratti? – morja

risposta

17

per ottenere il contenuto dei byte è possibile utilizzare

ZipInputStream zipStream = new ZipInputStream(new ByteArrayInputStream(bytes)); 
ZipEntry entry = null; 
while ((entry = zipStream.getNextEntry()) != null) { 

    String entryName = entry.getName(); 

    FileOutputStream out = new FileOutputStream(entryName); 

    byte[] byteBuff = new byte[4096]; 
    int bytesRead = 0; 
    while ((bytesRead = zipStream.read(byteBuff)) != -1) 
    { 
     out.write(byteBuff, 0, bytesRead); 
    } 

    out.close(); 
    zipStream.closeEntry(); 
} 
zipStream.close(); 
+0

ya questo mi aiuta a ottenere il nome della voce che è presente nel file zip. Usando questo possiamo solo leggere il contenuto. ma come possiamo salvarlo su disco. – Mohan

+0

È possibile leggere i byte da zipStream e quindi scriverli con FileOutputStream. Oppure scriverlo direttamente di nuovo. Vedi il mio aggiornamento. – morja

+0

Grazie mille, funziona perfettamente. – Mohan

5

Probabilmente alla ricerca di codice come questo:

ZipInputStream z = new ZipInputStream(new ByteArrayInputStream(buffer)) 

ora è possibile ottenere il contenuto del file zip via getNextEntry()

Problemi correlati