# ZIP Archive mit java.utils.zip.* entpacken



## uwe75-1 (22. Januar 2011)

Hallo,

ich habe jetzt so einige Stunden versucht mein Problem mit Google zu lösen, aber so richtig was passendes habe ich nicht gefunden. Deshalb frage ich Euch mal wieder, ob Ihr mir helfen könnt:

Ich habe ein ZIP Archiv, welches mit Winzip 14 erstellt worden ist - leider wird dieses Archiv von meiner Unzip Routine nicht entpackt. Archive, die mit der Windows integrierten ZIP Funktion erstellt worden sind, funktionieren mit meiner Routine einwandfrei - Woran liegt das? Wie kann ich das Problem lösen?

Vielen vielen Dank im Voraus für jeden kleinen Tip!

Hier mein Code:

try {
        ZipEntry entry;
        ZipInputStream zipin = new ZipInputStream(new FileInputStream(zipTempDest));
        while ((entry = zipin.getNextEntry()) != null) {
        String targetFileName;
        targetFileName = entry.getName().substring(entry.getName().lastIndexOf("/")+1);
        int read = 0;
        byte[] data = new byte[1024];
        FileOutputStream entryout = new FileOutputStream(targetInternal+targetFileName);
        while ((read = zipin.read(data,0,1024)) != -1) {
                entryout.write(data, 0, read);
        }
        entryout.close();
        }
        zipin.close();
    }
    catch (Exception e) {
        e.printStackTrace();
    }


----------



## genodeftest (22. Januar 2011)

Hallo
schau mal in meine Signatur… die BBCodes gibts nicht ohne Grund 

```
try {
   ZipEntry entry;
   ZipInputStream zipin = new ZipInputStream(new FileInputStream(zipTempDest));
   while ((entry = zipin.getNextEntry()) != null) {
      String targetFileName;
      targetFileName = entry.getName().substring(entry.getName().lastIndexOf("/")+1);
      int read = 0;
      byte[] data = new byte[1024];
      FileOutputStream entryout = new FileOutputStream(targetInternal+targetFileName);
      while ((read = zipin.read(data,0,1024)) != -1) {
          entryout.write(data, 0, read);
      }
      entryout.close();
   }
   zipin.close();
}
catch (Exception e) {
   e.printStackTrace();
}
```
Und Tabs hätten mir die Arbeit auch erleichtert 

Hat dein Code irgendwelche Exceptions ausgespuckt? Werden denn bei den fehlerhaften Extrahierungen wenigstens die leeren Dateien erstellt oder passiert da sonst irgendetwas?



> Archive, die mit der Windows integrierten ZIP Funktion erstellt worden sind,…


Naja, die ist ja bekanntlich nicht ganz Standard-Konform…

Vielleicht erstellt WinZip14 das Zip-File so, dass alles unter einem Haupt-Ordner liegt. Da du nur linear vorgehst und keine Verzeichnisse erstellst, kann dein Code aus so einem Zip-File nichts auslesen. Das könnte vielleicht das Problem sein.


----------



## uwe75-1 (23. Januar 2011)

Vielen dank für deine Hilfe und sorry, daß ich keine Einrückungen drin hatte, hab es jetzt auch hinbekommen - mit folgendem Code:

```
try {
            ZipEntry entry;
            //ZipInputStream zipin = new ZipInputStream(new FileInputStream("d:\\baer.zip"));
            ZipFile zipin = new ZipFile("d:\\small_classic_dir.zip");
            Enumeration entries = zipin.entries();
            byte[] buffer = new byte[16384];
            int len;
            while (entries.hasMoreElements()) {
                entry = (ZipEntry) entries.nextElement();
                String entryFileName = entry.getName();
                out.println(entry.getName()+" : "+entry.isDirectory()+"<br>");
                entryFileName = entry.getName().substring(entry.getName().lastIndexOf("/")+1);
                out.println("changed: "+entryFileName+"<br>");
                BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(new File("d:\\",entryFileName)));
                BufferedInputStream bis = new BufferedInputStream(zipin.getInputStream(entry));
                while ((len = bis.read(buffer)) >0) {
                    bos.write(buffer,0,len);
                }
                bos.flush();
                bos.close();
                bis.close();
            }
            zipin.close();
        }
        catch (Exception e) {
            e.printStackTrace();
        }
        out.println("finished");
```


----------



## uwe75-1 (23. Januar 2011)

sorry nach Absenden des Beitrags werden die Einrückungen entfernt - in dem letzten Code waren definitiv welche drin


----------

