Arbeiten mit ZIP-Archiven in Java: vollständige Anleitung
In der modernen Java-Entwicklung besteht häufig die Notwendigkeit, Dateien zu packen und zu entpacken. ZIP ist eines der beliebtesten Komprimierungsformate, das von der Standard-Java-Bibliothek unterstützt wird. Das integrierte Paket java.util.zip bietet alle notwendigen Werkzeuge für die Arbeit mit ZIP-Archiven ohne Installation von Abhängigkeiten Dritter.
Hauptklassen des Pakets java.util.zip
Das Paket java.util.zip enthält mehrere Schlüsselklassen für die Arbeit mit Archiven:
- ZipOutputStream — zum Erstellen von ZIP-Archiven und Schreiben von Dateien in diese
- ZipInputStream — zum Lesen des Inhalts von ZIP-Archiven
- ZipEntry — repräsentiert einen einzelnen Eintrag (Datei oder Verzeichnis) innerhalb des Archivs
- ZipFile — für den direkten Zugriff auf Archiveinträge nach Namen
- Deflater/Inflater — Low-Level-Klassen zum Komprimieren/Dekomprimieren von Daten
Erstellen eines ZIP-Archivs
Zum Erstellen eines Archivs wird ZipOutputStream verwendet. Jede hinzugefügte Datei wird als ZipEntry dargestellt. Betrachten wir ein Beispiel, das mehrere Dateien in ein Archiv packt:
import java.io.*;import java.util.zip.*;
public class CreateZipExample { public static void main(String[] args) { // Array der zu archivierenden Dateien String[] sourceFiles = {"file1.txt", "file2.txt", "image.png"}; String zipFileName = "archive.zip";
try (ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(zipFileName))) { byte[] buffer = new byte[1024];
for (String filePath : sourceFiles) { File file = new File(filePath); // Eintrag im Archiv erstellen ZipEntry zipEntry = new ZipEntry(file.getName()); zos.putNextEntry(zipEntry);
// Datei lesen und ins Archiv schreiben try (FileInputStream fis = new FileInputStream(file)) { int length; while ((length = fis.read(buffer)) > 0) { zos.write(buffer, 0, length); } } zos.closeEntry(); } System.out.println("Archiv erstellt: " + zipFileName); } catch (IOException e) { e.printStackTrace(); } }}Entpacken eines ZIP-Archivs
Zum Lesen eines Archivs wird ZipInputStream verwendet. Die Methode getNextEntry() gibt nacheinander alle Archiveinträge zurück:
import java.io.*;import java.util.zip.*;
public class ExtractZipExample { public static void main(String[] args) { String zipFileName = "archive.zip"; String outputDir = "extracted_files";
new File(outputDir).mkdir();
try (ZipInputStream zis = new ZipInputStream(new FileInputStream(zipFileName))) { ZipEntry entry; byte[] buffer = new byte[1024];
while ((entry = zis.getNextEntry()) != null) { String fileName = entry.getName(); File newFile = new File(outputDir + File.separator + fileName);
// Verzeichnisse bei Bedarf erstellen new File(newFile.getParent()).mkdirs();
try (FileOutputStream fos = new FileOutputStream(newFile)) { int length; while ((length = zis.read(buffer)) > 0) { fos.write(buffer, 0, length); } } zis.closeEntry(); System.out.println("Entpackt: " + fileName); } } catch (IOException e) { e.printStackTrace(); } }}Arbeiten mit ZipFile für wahlfreien Zugriff
\Auch in der Bibliothek
Überwachung von Node.js-Anwendungen: Tools und Bibliotheken
Wolverine für C# (.NET): Komplettguide mit Beispielen
Arbeit mit S3 und Cloud-Speichern in TypeScript: vollständiger Leitfaden
Alamofire für Swift: Vollständiger Leitfaden mit Beispielen