tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von MiRaMC
ERLEDIGT
NEIN
ANTWORTEN
11
ZUGRIFFE
13717
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    MiRaMC MiRaMC ist offline Mitglied Gold
    Registriert seit
    Sep 2003
    Beiträge
    106
    Hallo Leute

    Wie kann man ein zip-Archiv in ein bestimmtes Verzeichniss entpacken? Das Archiv enthält mehrere Ordner mit Unterordnern.

    thx
     

  2. #2
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    9.886
    Blog-Einträge
    29
    Hallo!

    Schau mal hier:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    
     package de.tutorials;
     
    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.util.Enumeration;
    import java.util.zip.ZipEntry;
    import java.util.zip.ZipFile;
     
    public class ZipArchiveExtractor {
     
        /**
         * @param args
         */
        public static void main(String[] args) throws Exception {
            new ZipArchiveExtractor().extractArchive(new File(
                    "s:/tools/eclipse/plugins/com.ibm.icu_3.4.4.1.jar"), new File(
                    "c:/tmp/x"));
        }
     
        public void extractArchive(File archive, File destDir) throws Exception {
            if (!destDir.exists()) {
                destDir.mkdir();
            }
     
            ZipFile zipFile = new ZipFile(archive);
            Enumeration entries = zipFile.entries();
     
            byte[] buffer = new byte[16384];
            int len;
            while (entries.hasMoreElements()) {
                ZipEntry entry = (ZipEntry) entries.nextElement();
     
                String entryFileName = entry.getName();
     
                File dir = dir = buildDirectoryHierarchyFor(entryFileName, destDir);
                if (!dir.exists()) {
                    dir.mkdirs();
                }
     
                if (!entry.isDirectory()) {
                    BufferedOutputStream bos = new BufferedOutputStream(
                            new FileOutputStream(new File(destDir, entryFileName)));
     
                    BufferedInputStream bis = new BufferedInputStream(zipFile
                            .getInputStream(entry));
     
                    while ((len = bis.read(buffer)) > 0) {
                        bos.write(buffer, 0, len);
                    }
     
                    bos.flush();
                    bos.close();
                    bis.close();
                }
            }
                    zipFile.close();
        }
     
        private File buildDirectoryHierarchyFor(String entryName, File destDir) {
            int lastIndex = entryName.lastIndexOf('/');
            String entryFileName = entryName.substring(lastIndex + 1);
            String internalPathToEntry = entryName.substring(0, lastIndex + 1);
            return new File(destDir, internalPathToEntry);
        }
    }

    //Edit: kleine korrektur so sollte es funktionieren.

    Gruß Tom
     
    Java rocks!
    How to become a good Java Programmer?
    Does IT in Java and .Net
    The only valid measurement of code quality: WTFs / minute
    Blog
    Xing
    Twitter

  3. #3
    MiRaMC MiRaMC ist offline Mitglied Gold
    Registriert seit
    Sep 2003
    Beiträge
    106
    Hallo erst mal danke für die schnelle Antwort.

    Versteh ich das richtig, dass

    public void extractArchive(File archive, File destDir) throws Exception {
    ...
    }

    die Methode fürs entpacken ist?
    Wie ruft man die dann mit den richtigen Angaben für das zip-Archiv und Zielverzeichnis auf?
    SamReciter bedankt sich. 

  4. #4
    MiRaMC MiRaMC ist offline Mitglied Gold
    Registriert seit
    Sep 2003
    Beiträge
    106
    Oh wie peinlich! Jetzt stand ich aber total auf der Leitung. Natürlich funktionierts jetzt
     

  5. #5
    MiRaMC MiRaMC ist offline Mitglied Gold
    Registriert seit
    Sep 2003
    Beiträge
    106
    Allerdings funktioniert der Code nicht mit Unterordnern im Archiv oder täusch ich mich da mal wieder?
     

  6. #6
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    9.886
    Blog-Einträge
    29
    Hallo!

    Allerdings funktioniert der Code nicht mit Unterordnern im Archiv oder täusch ich mich da mal wieder?
    ja du täuschst dich ... funktioniert bei mir einwandfrei mit Unterordnern im Archiv.

    Gruß Tom
     
    Java rocks!
    How to become a good Java Programmer?
    Does IT in Java and .Net
    The only valid measurement of code quality: WTFs / minute
    Blog
    Xing
    Twitter

  7. #7
    MiRaMC MiRaMC ist offline Mitglied Gold
    Registriert seit
    Sep 2003
    Beiträge
    106
    Kann man irgendwie noch in den Code reinbringen dass es bei jeder entpackten Datei eine Variable aktualisiert, die enthaltet wieviel Prozent des Archivs schon entpackt sind? Sicher geht das, aber wie?
     

  8. #8
    Avatar von RealHAZZARD
    RealHAZZARD RealHAZZARD ist offline Mitglied Brokat
    Registriert seit
    Mar 2005
    Beiträge
    388
    Tach.

    Hab auch schonmal zippen und entzippen gearbeitet, und wollte meine
    Benutzer auch eine ProgressBar sehen lassen.
    Ich bin zu dem Entschluss gekommen, dass es schon geht, aber nicht sehr
    genau ist.
    Eine Methode:
    Zähle die Verzeichnisse und Dateien in der ersten Ebene und diese nimmst du
    dann für deine Prozentrechnung. Wenn es 12 Files sind rechnest du also 100/12.
    und mit den 8,33 kannst du dann deine Variable hochticken. Also immer wenn ein
    File entpackt wurde zählst du um 8,33 hoch. Und zum Schluss sagst du der Variablen
    nochmal explizit "Du hast 100% erreicht".
    Die Methode würde ich aber nicht rekursiv anwenden. Das wär zu Performancelastig.
    Und so würde es reichen.
    Mustt du mal sehen ob dir das recht ist, oder ob Tom ne bessere Lösung hat
     
    Ich hab keine Ahnung.
    Aber davon jede Menge.

  9. #9
    v0rTex v0rTex ist offline Grünschnabel
    Registriert seit
    Jul 2007
    Beiträge
    3
    sollte man nicht vielleicht lieber sofern möglich die Größe der files
    in die prozentrechnung einbeziehen als die Anzahl?
    Ich mein wenn man son 3gig ding entpackt wäre ja erst 0% und dann auf einmal (nach einiger zeit in der die progressbar auf 0% bleibt) 100% ... 0o
    Selbst wenns jetzt nun 12 files wären sind die ja nich alle gleichgroß
     

  10. #10
    Java12345 Java12345 ist offline Grünschnabel
    Registriert seit
    May 2011
    Beiträge
    1
    Hallo zusammen,

    funktioniert oben stehender Code auch unter Linux?

    Oder muss folgende Zeile dafür verändert werden****?
    int lastIndex = entryName.lastIndexOf('/');

    Danke und Gruesse
     

  11. #11
    genodeftest genodeftest ist offline Mitglied Brillant
    Registriert seit
    Jun 2009
    Beiträge
    870
    int lastIndex = entryName.lastIndexOf('/');
    bezieht sich auf die Struktur innerhalb des ZIP-Archives. Diese ist unabhängig vom Betriebssystem. Der Slash ist das Trennzeichen zwischen internen "ordnern" und "Dateien".
    Was du allerdings ändern müsstest, wäre der Pfad zum ZIP-Archiv!
     
    Code bitte so einfügen: [java]System.out.println("Hallo");[/java] (Analog für andere Programmiersprachen)
    Code java:
    1
    
    System.out.println("Hallo");
    hilfreich zu Java: Really Big Index, Java ist auch eine Insel Band 1 und Band 2.
    ___________
    Ubuntu Bug #1: Microsoft has a majority market share
    Casecon: Projekt leiser Käse

  12. #12
    SamReciter SamReciter ist offline Grünschnabel
    Registriert seit
    Aug 2011
    Beiträge
    2
    Wie immer . Genau das was ich suchte. Gewöhn mir schon langsam an, deinen Namen mit in die Suche reinzunehmen. Vielen Dank für all den genialen Code den du der Welt zur Verfügung stellst.
     

Ähnliche Themen

  1. Zip entpacken
    Von Peter86 im Forum .NET Café
    Antworten: 15
    Letzter Beitrag: 09.10.11, 14:27
  2. Jar entpacken
    Von Leroux im Forum Microsoft Windows
    Antworten: 2
    Letzter Beitrag: 08.10.08, 11:32
  3. zip entpacken
    Von Sturm im Forum PHP
    Antworten: 3
    Letzter Beitrag: 09.01.07, 19:53
  4. *.gz entpacken
    Von ChuloGT im Forum PHP
    Antworten: 2
    Letzter Beitrag: 02.11.04, 13:53
  5. Entpacken von .zip
    Von rauchmelder im Forum PHP
    Antworten: 1
    Letzter Beitrag: 05.09.04, 19:31