2016-07-21 11 views
1

Javaを使用して1つのzipアーカイブに2つのファイルを入れる必要があります。私はfolowingコードを使用し、1つのファイルで正常に動作します。私は2つのファイルでメソッドを呼び出すと、それは例外をスローしませんが、私はあなたのループの最後でzipOutputStream.closeEntry()が欠落しているように見え、結果としてJavaでZipアーカイブに2つのファイルを追加

private File createZipFile(File[] files) throws IOException { 

     Random random = new Random(); 
     File zipFile = new File("D:\\zip.zip"); 

     FileOutputStream fileOutputStream = new FileOutputStream(zipFile); 
     ZipOutputStream zipOutputStream = new ZipOutputStream(new BufferedOutputStream(fileOutputStream)); 

     for (File file: files) { 
      BufferedInputStream bufferedInputStream = null; 
      byte data[] = new byte[1024]; 
      FileInputStream fileInputStream = new FileInputStream(file.getAbsolutePath()); 
      bufferedInputStream = new BufferedInputStream(fileInputStream, 1024); 

      ZipEntry entry = new ZipEntry(file.getName()); 
      zipOutputStream.putNextEntry(entry); 
      int count; 
      while ((count = bufferedInputStream.read(data, 0, 1024)) != -1) { 
       zipOutputStream.write(data, 0, count); 
      } 
      bufferedInputStream.close(); 
      fileInputStream.close(); 
     } 

     zipOutputStream.close(); 

     return zipFile; 
    } 
+0

私はこれを再現できません。結果ファイルが無効であることをどのように知っていますか?私は結果ファイル(2つのファイルを含む)を 'unzip'コマンドラインで適切に解凍することができました。 –

+0

2つのファイルで動作しました。例えば、2つのpdfファイルを置き、コードが動作します。再帰性を扱っていないので、ファイルがディレクトリの場合は失敗しました。 –

+0

@VadOs [mcve]を入力してください。ファイルが井戸かファイルかディレクトリかを知ることは特に重要です。 –

答えて

3

を、ファイルが壊れています。

+0

'public void putNextEntry(ZipEntry e)throw IOException'- 新しいZIPファイルエントリの書き込みを開始し、ストリームをエントリデータの先頭に配置します。 **まだアクティブな場合は現在のエントリを閉じます** –

関連する問題