{"id":431,"date":"2024-06-06T22:11:40","date_gmt":"2024-06-06T21:11:40","guid":{"rendered":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/?p=431"},"modified":"2024-06-26T22:13:26","modified_gmt":"2024-06-26T21:13:26","slug":"zip-archive-lesen-mit-java","status":"publish","type":"post","link":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/?p=431","title":{"rendered":"Zip-Archive lesen mit Java"},"content":{"rendered":"\n<p>Das Lesen von Zip-Archiven ist eine h\u00e4ufige Aufgabe in der Softwareentwicklung, insbesondere wenn es darum geht, Daten zu komprimieren und zu dekomprimieren oder mehrere Dateien in einer einzigen Archivdatei zu b\u00fcndeln. Java bietet eine robuste Unterst\u00fctzung f\u00fcr die Arbeit mit Zip-Archiven \u00fcber die <code>java.util.zip<\/code>-Bibliothek. In diesem Artikel werden wir uns eingehend mit den verschiedenen Techniken und Best Practices f\u00fcr das Lesen von Zip-Archiven in Java besch\u00e4ftigen.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Grundlegende Konzepte<\/h3>\n\n\n\n<p>Bevor wir uns in den Code vertiefen, ist es wichtig, einige grundlegende Konzepte zu verstehen:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Zip-Format<\/strong>: Das Zip-Format ist ein weit verbreitetes Archivformat, das die M\u00f6glichkeit bietet, mehrere Dateien zu komprimieren und in einer einzigen Datei zu speichern.<\/li>\n\n\n\n<li><strong><code>ZipInputStream<\/code><\/strong>: Eine Klasse in Java, die das Lesen von Eintr\u00e4gen (Dateien) in einem Zip-Archiv erm\u00f6glicht.<\/li>\n\n\n\n<li><strong><code>ZipEntry<\/code><\/strong>: Repr\u00e4sentiert eine einzelne Datei oder ein Verzeichnis innerhalb eines Zip-Archivs.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Ein einfaches Beispiel<\/h3>\n\n\n\n<p>Im Folgenden zeigen wir ein einfaches Beispiel, das ein Zip-Archiv \u00f6ffnet und die Namen aller darin enthaltenen Dateien ausgibt:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">import<\/span> java.io.FileInputStream;\n<span class=\"hljs-keyword\">import<\/span> java.io.IOException;\n<span class=\"hljs-keyword\">import<\/span> java.util.zip.ZipEntry;\n<span class=\"hljs-keyword\">import<\/span> java.util.zip.ZipInputStream;\n\npublic <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">ZipReader<\/span> <\/span>{\n    public <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">void<\/span> main(<span class=\"hljs-built_in\">String<\/span>&#91;] args) {\n        <span class=\"hljs-built_in\">String<\/span> zipFilePath = <span class=\"hljs-string\">\"example.zip\"<\/span>;\n\n        <span class=\"hljs-keyword\">try<\/span> (FileInputStream fis = <span class=\"hljs-keyword\">new<\/span> FileInputStream(zipFilePath);\n             ZipInputStream zis = <span class=\"hljs-keyword\">new<\/span> ZipInputStream(fis)) {\n\n            ZipEntry entry;\n            <span class=\"hljs-keyword\">while<\/span> ((entry = zis.getNextEntry()) != <span class=\"hljs-literal\">null<\/span>) {\n                System.out.println(<span class=\"hljs-string\">\"Unzipping: \"<\/span> + entry.getName());\n                zis.closeEntry();\n            }\n        } <span class=\"hljs-keyword\">catch<\/span> (IOException e) {\n            e.printStackTrace();\n        }\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">Erkl\u00e4rung des Codes<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Dateipfad<\/strong>: Der Pfad zur Zip-Datei wird in der Variable <code>zipFilePath<\/code> gespeichert.<\/li>\n\n\n\n<li><strong><code>FileInputStream<\/code><\/strong>: \u00d6ffnet die Zip-Datei zum Lesen.<\/li>\n\n\n\n<li><strong><code>ZipInputStream<\/code><\/strong>: Wird verwendet, um durch die Eintr\u00e4ge im Zip-Archiv zu iterieren.<\/li>\n\n\n\n<li><strong><code>ZipEntry<\/code><\/strong>: Repr\u00e4sentiert jede Datei im Archiv. Der Name der Datei wird ausgegeben.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Lesen des Inhalts von Dateien im Zip-Archiv<\/h3>\n\n\n\n<p>Nun wollen wir den Inhalt der Dateien im Zip-Archiv lesen und ausgeben. Daf\u00fcr m\u00fcssen wir den Inhalt jedes <code>ZipEntry<\/code> in einen Puffer lesen und verarbeiten:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">import<\/span> java.io.FileInputStream;\n<span class=\"hljs-keyword\">import<\/span> java.io.IOException;\n<span class=\"hljs-keyword\">import<\/span> java.util.zip.ZipEntry;\n<span class=\"hljs-keyword\">import<\/span> java.util.zip.ZipInputStream;\n\npublic <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">ZipReader<\/span> <\/span>{\n    public <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">void<\/span> main(<span class=\"hljs-built_in\">String<\/span>&#91;] args) {\n        <span class=\"hljs-built_in\">String<\/span> zipFilePath = <span class=\"hljs-string\">\"example.zip\"<\/span>;\n\n        <span class=\"hljs-keyword\">try<\/span> (FileInputStream fis = <span class=\"hljs-keyword\">new<\/span> FileInputStream(zipFilePath);\n             ZipInputStream zis = <span class=\"hljs-keyword\">new<\/span> ZipInputStream(fis)) {\n\n            ZipEntry entry;\n            <span class=\"hljs-keyword\">while<\/span> ((entry = zis.getNextEntry()) != <span class=\"hljs-literal\">null<\/span>) {\n                System.out.println(<span class=\"hljs-string\">\"Unzipping: \"<\/span> + entry.getName());\n\n                <span class=\"hljs-keyword\">if<\/span> (!entry.isDirectory()) {\n                    byte&#91;] buffer = <span class=\"hljs-keyword\">new<\/span> byte&#91;<span class=\"hljs-number\">1024<\/span>];\n                    int len;\n                    <span class=\"hljs-keyword\">while<\/span> ((len = zis.read(buffer)) &gt; <span class=\"hljs-number\">0<\/span>) {\n                        System.out.write(buffer, <span class=\"hljs-number\">0<\/span>, len);\n                    }\n                }\n                zis.closeEntry();\n            }\n        } <span class=\"hljs-keyword\">catch<\/span> (IOException e) {\n            e.printStackTrace();\n        }\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">Erkl\u00e4rung des erweiterten Codes<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Puffer (<code>byte[] buffer<\/code>)<\/strong>: Ein Puffer, um Daten aus dem <code>ZipInputStream<\/code> zu lesen.<\/li>\n\n\n\n<li><strong>Schleife (<code>while ((len = zis.read(buffer)) > 0)<\/code>)<\/strong>: Liest Daten aus dem aktuellen Eintrag in den Puffer und schreibt sie auf die Konsole.<\/li>\n\n\n\n<li><strong><code>isDirectory()<\/code><\/strong>: Pr\u00fcft, ob der Eintrag ein Verzeichnis ist. Verzeichnisse werden nicht weiter verarbeitet.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Schreiben der Dateien auf die Festplatte<\/h3>\n\n\n\n<p>In vielen F\u00e4llen m\u00f6chten Sie die Dateien aus dem Zip-Archiv extrahieren und auf der Festplatte speichern. Dazu m\u00fcssen wir die Dateien in entsprechenden Verzeichnissen erstellen:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">import<\/span> java.io.File;\n<span class=\"hljs-keyword\">import<\/span> java.io.FileOutputStream;\n<span class=\"hljs-keyword\">import<\/span> java.io.FileInputStream;\n<span class=\"hljs-keyword\">import<\/span> java.io.IOException;\n<span class=\"hljs-keyword\">import<\/span> java.util.zip.ZipEntry;\n<span class=\"hljs-keyword\">import<\/span> java.util.zip.ZipInputStream;\n\npublic <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">ZipReader<\/span> <\/span>{\n    public <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">void<\/span> main(<span class=\"hljs-built_in\">String<\/span>&#91;] args) {\n        <span class=\"hljs-built_in\">String<\/span> zipFilePath = <span class=\"hljs-string\">\"example.zip\"<\/span>;\n        <span class=\"hljs-built_in\">String<\/span> destDir = <span class=\"hljs-string\">\"output\"<\/span>;\n\n        File dir = <span class=\"hljs-keyword\">new<\/span> File(destDir);\n        <span class=\"hljs-keyword\">if<\/span> (!dir.exists()) dir.mkdirs();\n\n        <span class=\"hljs-keyword\">try<\/span> (FileInputStream fis = <span class=\"hljs-keyword\">new<\/span> FileInputStream(zipFilePath);\n             ZipInputStream zis = <span class=\"hljs-keyword\">new<\/span> ZipInputStream(fis)) {\n\n            ZipEntry entry;\n            <span class=\"hljs-keyword\">while<\/span> ((entry = zis.getNextEntry()) != <span class=\"hljs-literal\">null<\/span>) {\n                File newFile = <span class=\"hljs-keyword\">new<\/span> File(destDir, entry.getName());\n\n                <span class=\"hljs-keyword\">if<\/span> (entry.isDirectory()) {\n                    newFile.mkdirs();\n                } <span class=\"hljs-keyword\">else<\/span> {\n                    <span class=\"hljs-keyword\">new<\/span> File(newFile.getParent()).mkdirs();\n                    <span class=\"hljs-keyword\">try<\/span> (FileOutputStream fos = <span class=\"hljs-keyword\">new<\/span> FileOutputStream(newFile)) {\n                        byte&#91;] buffer = <span class=\"hljs-keyword\">new<\/span> byte&#91;<span class=\"hljs-number\">1024<\/span>];\n                        int len;\n                        <span class=\"hljs-keyword\">while<\/span> ((len = zis.read(buffer)) &gt; <span class=\"hljs-number\">0<\/span>) {\n                            fos.write(buffer, <span class=\"hljs-number\">0<\/span>, len);\n                        }\n                    }\n                }\n                zis.closeEntry();\n            }\n        } <span class=\"hljs-keyword\">catch<\/span> (IOException e) {\n            e.printStackTrace();\n        }\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">Erkl\u00e4rung des erweiterten Codes<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Zielverzeichnis (<code>destDir<\/code>)<\/strong>: Das Verzeichnis, in das die extrahierten Dateien gespeichert werden.<\/li>\n\n\n\n<li><strong>Verzeichnisse erstellen<\/strong>: Wenn der <code>ZipEntry<\/code> ein Verzeichnis ist, wird dieses erstellt.<\/li>\n\n\n\n<li><strong>Dateien schreiben<\/strong>: Wenn der <code>ZipEntry<\/code> eine Datei ist, wird ein <code>FileOutputStream<\/code> verwendet, um die Datei zu speichern.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Behandlung von Sonderf\u00e4llen<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">Passwortgesch\u00fctzte Zip-Archive<\/h4>\n\n\n\n<p>Java unterst\u00fctzt von Haus aus keine passwortgesch\u00fctzten Zip-Archive. Daf\u00fcr m\u00fcssen Sie auf Drittanbieter-Bibliotheken wie Apache Commons Compress oder Zip4j zur\u00fcckgreifen. Hier ist ein Beispiel mit Zip4j:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">import<\/span> net.lingala.zip4j.core.ZipFile;\n<span class=\"hljs-keyword\">import<\/span> net.lingala.zip4j.exception.ZipException;\n<span class=\"hljs-keyword\">import<\/span> net.lingala.zip4j.model.FileHeader;\n\n<span class=\"hljs-keyword\">import<\/span> java.io.File;\n<span class=\"hljs-keyword\">import<\/span> java.io.IOException;\n\npublic <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">ZipReader<\/span> <\/span>{\n    public <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">void<\/span> main(<span class=\"hljs-built_in\">String<\/span>&#91;] args) {\n        <span class=\"hljs-built_in\">String<\/span> zipFilePath = <span class=\"hljs-string\">\"example.zip\"<\/span>;\n        <span class=\"hljs-built_in\">String<\/span> destDir = <span class=\"hljs-string\">\"output\"<\/span>;\n        <span class=\"hljs-built_in\">String<\/span> password = <span class=\"hljs-string\">\"password\"<\/span>;\n\n        <span class=\"hljs-keyword\">try<\/span> {\n            ZipFile zipFile = <span class=\"hljs-keyword\">new<\/span> ZipFile(zipFilePath);\n            <span class=\"hljs-keyword\">if<\/span> (zipFile.isEncrypted()) {\n                zipFile.setPassword(password.toCharArray());\n            }\n            zipFile.extractAll(destDir);\n        } <span class=\"hljs-keyword\">catch<\/span> (ZipException e) {\n            e.printStackTrace();\n        }\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">Schlussfolgerung<\/h3>\n\n\n\n<p>Das Lesen und Extrahieren von Zip-Archiven in Java ist dank der <code>java.util.zip<\/code>-Bibliothek relativ einfach. F\u00fcr komplexere Anforderungen wie passwortgesch\u00fctzte Archive k\u00f6nnen Drittanbieter-Bibliotheken wie Zip4j verwendet werden. Mit den hier vorgestellten Techniken k\u00f6nnen Sie effektiv und effizient mit Zip-Archiven in Ihren Java-Anwendungen arbeiten.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Das Lesen von Zip-Archiven ist eine h\u00e4ufige Aufgabe in der Softwareentwicklung, insbesondere wenn es darum geht, Daten zu komprimieren und zu dekomprimieren oder mehrere Dateien in einer einzigen Archivdatei zu b\u00fcndeln. Java bietet eine robuste Unterst\u00fctzung f\u00fcr die Arbeit mit Zip-Archiven \u00fcber die java.util.zip-Bibliothek. In diesem Artikel werden wir uns eingehend mit den verschiedenen Techniken [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":["post-431","post","type-post","status-publish","format-standard","hentry","category-plain_java"],"_links":{"self":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/431","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=431"}],"version-history":[{"count":1,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/431\/revisions"}],"predecessor-version":[{"id":432,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/431\/revisions\/432"}],"wp:attachment":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=431"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=431"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=431"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}