Arbeiten mit ZIP-Archiven in Java: Vollständige Anleitung zu java.util.zip
Datenarchivierung ist eine der grundlegenden Aufgaben in der Softwareentwicklung. Java bietet einen leistungsstarken und flexiblen Werkzeugsatz für die Arbeit mit ZIP-Archiven "out of the box" – das Paket java.util.zip. In diesem Artikel werden wir im Detail besprechen, wie man ZIP-Archive mit den Standardmitteln von Java erstellt, entpackt und modifiziert.
Wichtige Klassen des Pakets java.util.zip
Das Paket java.util.zip enthält die wichtigsten Klassen für die Arbeit mit Archiven:
- ZipOutputStream – zum Erstellen von ZIP-Archiven (Schreiben von Dateien in das Archiv)
- ZipInputStream – zum Lesen und Entpacken von ZIP-Archiven
- ZipEntry – repräsentiert einen einzelnen Eintrag (Datei/Verzeichnis) innerhalb des Archivs
- ZipFile – für den direkten Zugriff auf den Archivinhalt ohne vollständiges Entpacken
- CheckedOutputStream / CheckedInputStream – zur Überprüfung der Datenintegrität (CRC32, Adler32)
Erstellen eines ZIP-Archivs (ZipOutputStream)
Zum Erstellen eines Archivs wird ZipOutputStream verwendet, der einen normalen FileOutputStream umschließt. Jede hinzugefügte Datei wird durch ein ZipEntry-Objekt dargestellt.
import java.io.*;import java.util.zip.*;
public class CreateZip { public static void main(String[] args) throws IOException { String[] sourceFiles = {"file1.txt", "file2.txt", "image.png"}; String zipName = "archive.zip";
try (ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(zipName))) { byte[] buffer = new byte[1024];
for (String filePath : sourceFiles) { File file = new File(filePath); FileInputStream fis = new FileInputStream(file);
// Eintrag im Archiv erstellen ZipEntry zipEntry = new ZipEntry(file.getName()); zos.putNextEntry(zipEntry);
// Dateiinhalt schreiben int length; while ((length = fis.read(buffer)) > 0) { zos.write(buffer, 0, length); } zos.closeEntry(); fis.close(); System.out.println("Hinzugefügt: " + file.getName()); } } System.out.println("Archiv erstellt: " + zipName); }}Wichtige Hinweise beim Erstellen eines Archivs:
- Rufen Sie immer
putNextEntry()vor dem Schreiben von Daten undcloseEntry()danach auf - Für das Hinzufügen eines leeren Verzeichnisses verwenden Sie
ZipEntry(name + "/")– der Name muss mit "/" enden - Verwenden Sie try-with-resources für das automatische Schließen der Streams
Entpacken eines ZIP-Archivs (ZipInputStream)
Zum Extrahieren von Dateien aus einem Archiv wird ZipInputStream verwendet. Das Lesen erfolgt sequenziell – Eintrag für Eintrag.
import java.io.*;import java.util.zip.*;
public class ExtractZip { public static void main(String[] args) throws IOException { String zipFile = "archive.zip"; String outputDir = "extracted";
File dir = new File(outputDir); if (!dir.exists()) dir.mkdirs();
try (ZipInputStream zis = new ZipInputStream(new FileInputStream(zipFile))) { ZipEntry entry; byte[] buffer = new byte[1024];
while ((entry = zis.getNextEntry()) != null) { String fileName = entry.getName(); File newFile = new File(outputDir + File.separator + fileName);
// Übergeordnete Verzeichnisse erstellen new File(newFile.getParent()).mkdirs();
// Datei schreiben FileOutputStream fos = new FileOutputStream(newFile); int length; Auch in der Bibliothek
Datenvalidierung in TypeScript: Zod, Yup und andere Werkzeuge
Anvil für Kotlin: Vollständiges Tutorial mit Codebeispielen
Kingfisher für Swift: Vollständiger Leitfaden mit Beispielen
Konfiguration von PHP-Anwendungen: Bibliotheken und Werkzeuge für flexible Einstellungen
Datenbankmigrationen in Node.js: Überblick über Tools und Beispiele