2011-12-03 13 views
5

バイトの配列をZIPファイルに変換しようとしています。どのようにそれを行うことができます -バイト配列を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; 
} 

しかし、今私の問題は、ZIPファイルに戻ってバイト配列に変換している:私は、次のコードを使用してバイトを得ましたか。

注:指定されたZIPには2つのファイルが含まれています。

+0

正確に何をしたいですか?バイトをディスクに書き込んでzipファイルに書き込もうとしますか?または内容を読んでみませんか?読み込んだバイトはまだデコードされていません。 – morja

+0

@ morja - > yes私はzipファイルの形でバイトをディスクに書き戻したい。 – Mohan

+0

さて、バイトをFileOutputStreamでディスクに書き戻し、ファイルの名前を.zipにします。あなたは抽出されたファイルを書いてはいけませんか? – morja

答えて

17

あなたが使用できるバイトから内容

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

これは、私はzipファイル内に存在するエントリ名を取得するのに役立ちます。これを使用して、私たちはそのコンテンツだけを読むことができます。どのようにディスクに格納することができます。 – Mohan

+0

バイトをzipStreamから読み込み、FileOutputStreamで書き込むことができます。または直接書き直す。私の更新を参照してください。 – morja

+0

ありがとう、それは完璧に動作します。 – Mohan

5

あなたは、おそらくこのようなコードを探しています取得するには:

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

今あなたがgetNextEntry()

を経由してzipファイルの内容を取得することができます
関連する問題