Arbeiten mit ZIP/Archiven in Java: java.util.zip und Zip4j

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Arbeiten mit ZIP/Archiven in Java: java.util.zip und Zip4j



Datenkomprimierung und Archivierung gehören zu den Kernaufgaben bei der Entwicklung von Java-Anwendungen. ZIP-Archive werden häufig zum Verpacken von Dateien, zur Datenübertragung über Netzwerke und zur Einsparung von Speicherplatz verwendet. In diesem Artikel betrachten wir zwei grundlegende Ansätze für die Arbeit mit ZIP-Archiven in Java: das integrierte Paket java.util.zip und die leistungsstarke Drittanbieter-Bibliothek Zip4j.



Das Standardpaket java.util.zip



Seit JDK 1.1 ist in Java das Paket java.util.zip verfügbar, das grundlegende Klassen für die Arbeit mit dem ZIP-Format bereitstellt. Die wichtigsten Klassen:

  • ZipOutputStream — zum Erstellen von ZIP-Archiven
  • ZipInputStream — zum Lesen von ZIP-Archiven
  • ZipEntry — repräsentiert einen einzelnen Eintrag (Datei oder Ordner) innerhalb des Archivs
  • ZipFile — für den wahlfreien Zugriff auf den Archivinhalt


Erstellen eines ZIP-Archivs mit java.util.zip



import java.io.*;import java.util.zip.*;

public class ZipCreator { public static void main(String[] args) throws IOException { String sourceFile = "document.txt"; String zipName = "archive.zip";

try (FileOutputStream fos = new FileOutputStream(zipName); ZipOutputStream zos = new ZipOutputStream(fos)) {

File fileToZip = new File(sourceFile); FileInputStream fis = new FileInputStream(fileToZip);

ZipEntry zipEntry = new ZipEntry(fileToZip.getName()); zos.putNextEntry(zipEntry);

byte[] buffer = new byte[1024]; int length; while ((length = fis.read(buffer)) >= 0) { zos.write(buffer, 0, length); } zos.closeEntry(); fis.close(); } System.out.println("Archiv erstellt: " + zipName); }}


Entpacken eines ZIP-Archivs



import java.io.*;import java.util.zip.*;

public class ZipExtractor { public static void main(String[] args) throws IOException { String zipFile = "archive.zip"; String outputDir = "extracted";

new File(outputDir).mkdirs();

try (ZipInputStream zis = new ZipInputStream(new FileInputStream(zipFile))) { ZipEntry entry; while ((entry = zis.getNextEntry()) != null) { File newFile = new File(outputDir, entry.getName()); new File(newFile.getParent()).mkdirs();

FileOutputStream fos = new FileOutputStream(newFile); byte[] buffer = new byte[1024]; int len; while ((len = zis.read(buffer)) > 0) { fos.write(buffer, 0, len); } fos.close(); zis.closeEntry(); } } System.out.println("Entpacken abgeschlossen in Ordner: " + outputDir); }}


Einschränkungen von java.util.zip:

  • Keine Unterstützung für Verschlüsselung (Passwortschutz)
  • Eingeschränkte Unicode-Unterstützung in Dateinamen (vor Java 7)
  • Keine Unterstützung für ZIP64 bei Archiven > 4 GB (vor Java 8)
  • Komplexität bei der Arbeit mit verschachtelten Ordnern


Die Bibliothek Zip4j — erweiterte Funktionen



Zip4j ist eine beliebte Open-Source-Drittanbieter-Bibliothek, die die meisten Einschränkungen des Standardpakets behebt. Fügen Sie für die Einbindung die folgende Abhängigkeit in Maven hinzu:



<dependency>    <groupId>net.lingala.zip4j</groupId>    <artifactId>zip4j</artifactId>    <version>2.11.5</version></dependency>


Erstellen eines verschlüsselten ZIP-Archivs mit Zip4j



import net.lingala.zip4j.ZipFile;import net.lingala.zip4j.model.ZipParam                    

Empfehlungen