2016-03-23 11 views
0

Meine UnZip-Klasse entpackt nicht die ganze Datei. Diese Klasse wird von einer anderen Aktivität aufgerufen. Meine Zip-Datei wird im Hauptverzeichnis des internen Speichers des Telefons gespeichert. Die Zip-Datei enthält Ordner und etwas Video. Was ist falsch mit diesem unzip? Was und wie soll ich Datei von Zip lesen 'dekomprimieren und entpacken ist die gleiche Bedeutung?Fehler beim Entpacken erhalten

Danke für Ihre Hilfe!

public class Unzip { 
    private static final String INPUT_ZIP_FILE = "sdcard/downloaded_issue.zip"; 
    private static final String OUTPUT_FOLDER = "sdcard/Atlantis/"; 

    public static void main() 
    { 
    Unzip unZip = new Unzip(); 
    unZip.unZipIt(INPUT_ZIP_FILE, OUTPUT_FOLDER); 
    } 

/** 
* Unzip it 
* @param zipFile input zip file 
* @param outputFolder zip file output folder 
*/ 
public void unZipIt(String zipFile, String outputFolder){ 
    byte[] buffer = new byte[1024]; 
    try{ 

     //create output directory is not exists 
     File folder = new File(OUTPUT_FOLDER); 
     if(!folder.exists()){ 
      folder.mkdir(); 
     } 

     //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(); 
      if (ze.isDirectory()) { 
      ze = zis.getNextEntry(); 
      } 
     } 

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

     System.out.println("Done"); 

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

Welche Programmiersprache ist das? Sieht auf den ersten Blick wie Java oder C# aus. – Nyerguds

+0

Es ist Java. und ich programmiere mit Android Studio – Weblu

+0

Tag als solches, dann. Sie erhalten viel schnellere Antwort, wenn die Programmiersprache enthalten ist; Leute neigen dazu, das zu filtern. – Nyerguds

Antwort

0

Ich denke, Ihre 'while' Schleife ist kaputt; Sie holen nur den nächsten Eintrag, wenn dieser nächste Eintrag ein Verzeichnis ist, während ich davon ausgehe, dass Sie wahrscheinlich versuchen, die Verzeichnisse zu überspringen.

Wie auch immer, da Sie die Ordner für alle gefundenen Dateien erstellen, können Sie einfach die Ordnereinträge überspringen und die Dateieinträge schreiben. Die einzige Ausnahme wäre die Erstellung von leeren Ordnern.

Austauschen der while-Schleife durch diesen Code funktionieren sollte:

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 
     if (ze.isDirectory()) { 
      // create the folder 
      newFile.mkdirs(); 
     } 
     else { 
      // create the parent folder and write to disk 
      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(); 
     } 
     // get the next item 
     ze = zis.getNextEntry(); 
    } 
+0

Ich muss alle Ordner extrahieren. Überspringe sie nicht. – Weblu

+0

Dann brauchen Sie eindeutig mehr Code. – Nyerguds

+0

Nein, warte. Dies ist nicht rekursiv, und Ordnereinträge selbst, sofern der Ordner nicht leer ist, haben keinen Wert, da Sie die Ordner für Dateien trotzdem automatisch erstellen. Das Beste, was Sie tun können, ist sie zu erstellen und dann zu überspringen, ja. – Nyerguds

Verwandte Themen