2016-07-21 12 views
1

Ich muss 2 Dateien in ein Zip-Archiv mit Java einfügen. Ich benutze den folgenden Code und es funktioniert gut mit einer Datei. Wenn ich die Methode mit zwei Dateien aufrufen spielt es keine Ausnahme auslösen, aber ich habe Datei als Folge gebrochenHinzufügen von 2 Dateien zum Zip-Archiv mit Java

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

Ich kann das nicht reproduzieren. Woher wissen Sie, dass Ihre Ergebnisdatei ungültig ist? Ich könnte die Ergebnisdatei (enthält zwei Dateien) mit der Kommandozeile 'entpacken' richtig entpacken. –

+0

Es funktionierte für zwei Dateien, zum Beispiel habe ich zwei PDF-Dateien und der Code funktioniert. Es ist fehlgeschlagen, wenn die Dateien Verzeichnisse sind, da Sie die Rekursivität nicht behandelt haben. –

+0

@VadOs bitte ein [mcve]. Es ist besonders wichtig zu wissen, ob die Dateien, nun, Dateien oder Verzeichnisse sind. –

Antwort

3

Es ist wie Sie zipOutputStream.closeEntry() am Ende der Schleife fehlen aussieht.

+0

'public void putNextEntry (ZipEntry e) löst IOException'- Beginnt mit dem Schreiben eines neuen ZIP-Dateieintrags und positioniert den Stream an den Anfang der Eingabedaten. ** Schließt den aktuellen Eintrag, wenn noch aktiv ** –

Verwandte Themen