2016-04-08 9 views
0

Ich versuche eine Datei mit Java zu entpacken, aber der folgende Code kommt nicht in die while-Schleife, da 'ze' null ist. Allerdings kann ich dieselbe Datei mit der 7zip-Anwendung entpacken. Kann mir jemand sagen, warum ist das so gut?Es ist nicht möglich, eine Datei mit Java zu entzippen, aber mit 7zip zu entpacken.

try {

 //get the zip file content 
     ZipInputStream zis = 
      new ZipInputStream(new FileInputStream(zipFile)); 
     //get the zipped file list entry 
     ZipEntry ze = zis.getNextEntry(); 

     while(ze!=null){ 

      String fileName = ze.getName(); 
      File newFile = new File(outputFolder + File.separator + fileName); 

      System.out.println("file unzip : "+ newFile.getAbsoluteFile()); 

      //create all non exists folders 
      //else you will hit FileNotFoundException for compressed folder 
      new File(newFile.getParent()).mkdirs(); 

      FileOutputStream fos = new FileOutputStream(newFile);    

      int len; 
      while ((len = zis.read(buffer)) > 0) { 
      fos.write(buffer, 0, len); 
      } 

      fos.close(); 
      ze = zis.getNextEntry(); 
     } 

     zis.closeEntry(); 
     zis.close(); 

     System.out.println("Done"); 

    }catch(IOException ex){ 
     ex.printStackTrace(); 
    } 
+0

Ist es eine .7z-Datei oder eine .zip-Datei? – AJNeufeld

Antwort

1

Die javadocs hier: https://docs.oracle.com/javase/7/docs/api/java/util/zip/ZipInputStream.html sagt, dass getNextEntry() null zurück, wenn es keine weiteren Einträge sind. Überprüfen Sie, ob Ihre ZIP-Datei tatsächlich Dateien enthält oder leer ist.

Ich versuchte Ihren Code mit einer Zip, die Dateien enthielt und es lief richtig. Ich habe es mit einer leeren Zip-Datei versucht und ze war null für die leere Datei und deshalb ging es nicht in die while-Schleife.

+0

Ich habe es aussortiert. Das Problem war, dass meine Datei gezippt und nicht gezippt wurde. Ich benutzte den GZIPInputStream und es lief gut :) – user1496783

+0

Danke für die Hilfe obwohl @posiedon – user1496783