2011-12-03 17 views
5

Próbuję przekonwertować tablicę bajtów do pliku ZIP. Mam bajtów za pomocą następującego kodu:Jak przekonwertować tablicę bajtów do pliku 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; 
} 

Ale teraz mój problem jest z konwersji tablicę bajtów z powrotem do pliku ZIP - w jaki sposób można to zrobić?

Uwaga: Podany ZIP zawiera dwa pliki.

+0

Czego dokładnie chcesz? Czy chcesz zapisać bajty z powrotem na dysk w pliku zip? Czy chcesz przeczytać zawartość? Bajty, jak je czytać, nie są jeszcze dekodowane. – morja

+0

@ morja -> tak chcę napisać bajty z powrotem na dysk w postaci pliku zip. – Mohan

+0

No cóż, ale po prostu zapisz bajty z powrotem na dysk za pomocą FileOutputStream i nazwij plik .zip. Nie chcesz pisać wyodrębnionych plików? – morja

Odpowiedz

17

Aby uzyskać zawartość z bajtów można użyć

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 to pomaga mi uzyskać nazwę wpisu, która jest obecna w pliku zip. Korzystając z tego możemy tylko czytać treść. ale w jaki sposób możemy przechowywać go na dysku. – Mohan

+0

Możesz odczytać bajty z pliku zipStream, a następnie zapisać go za pomocą FileOutputStream. Lub bezpośrednio wypisz to ponownie. Zobacz moją aktualizację. – morja

+0

Wielkie dzięki, działa idealnie. – Mohan

5

Prawdopodobnie szukasz kodu tak:

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

teraz można uzyskać zawartość pliku zip poprzez getNextEntry()

Powiązane problemy