Arbeiten mit ZIP/Archiven in Kotlin: ZIP-InputStream und ZipFile

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 Kotlin: vollständige Anleitung

In der modernen Entwicklung mit Kotlin (JVM) besteht häufig die Notwendigkeit, Dateien zu packen oder zu entpacken. Die Standardbibliothek von Java bietet leistungsstarke Werkzeuge für die Arbeit mit dem ZIP-Format über das Paket java.util.zip. In diesem Artikel werden wir im Detail besprechen, wie man ZIP-Archive mit Kotlin und den integrierten JVM-Funktionen erstellt, liest und modifiziert.



Wichtige Klassen für die Arbeit mit ZIP

Für die Arbeit mit ZIP-Archiven in Kotlin werden die folgenden Klassen aus java.util.zip verwendet:

  • ZipOutputStream — zum Erstellen neuer ZIP-Archive und Hinzufügen von Dateien.
  • ZipInputStream — zum sequenziellen Lesen des Archivinhalts (Stream-Modus).
  • ZipFile — für den wahlfreien Zugriff auf Archiveinträge (Random Access).
  • ZipEntry — repräsentiert einen einzelnen Eintrag (Datei oder Verzeichnis) innerhalb des Archivs.

Alle diese Klassen sind Teil der Standard-JDK-Bibliothek, daher sind keine zusätzlichen Abhängigkeiten erforderlich.



Erstellen eines ZIP-Archivs

Zum Erstellen eines Archivs wird ZipOutputStream verwendet, das einen FileOutputStream umschließt. Jede Datei wird über ZipEntry hinzugefügt.

import java.io.Fileimport java.io.FileInputStreamimport java.io.FileOutputStreamimport java.util.zip.ZipEntryimport java.util.zip.ZipOutputStream

fun createZipArchive(sourceDir: String, zipFilePath: String) { val dir = File(sourceDir) val files = dir.listFiles() ?: return ZipOutputStream(FileOutputStream(zipFilePath)).use { zos -> for (file in files) { if (file.isFile) { // Eintrag mit Dateinamen erstellen val entry = ZipEntry(file.name) zos.putNextEntry(entry) // Dateiinhalt kopieren FileInputStream(file).use { fis -> fis.copyTo(zos) } zos.closeEntry() } } } println("Archiv erstellt: $zipFilePath")}

// Beispielaufruffun main() { createZipArchive("/pfad/zum/quellverzeichnis", "/pfad/zum/archiv.zip")}


Entpacken eines ZIP-Archivs

Das Entpacken erfolgt über ZipInputStream. Wir lesen jeden Eintrag und stellen die Dateien auf der Festplatte wieder her.

import java.io.Fileimport java.io.FileInputStreamimport java.io.FileOutputStreamimport java.util.zip.ZipInputStream

fun extractZipArchive(zipFilePath: String, outputDir: String) { val outputFolder = File(outputDir).also { it.mkdirs() } ZipInputStream(FileInputStream(zipFilePath)).use { zis -> var entry = zis.nextEntry while (entry != null) { val fileName = entry.name val outputFile = File(outputFolder, fileName) // Übergeordnete Verzeichnisse erstellen, falls nötig outputFile.parentFile?.mkdirs() // Nur Dateien entpacken (keine Verzeichnisse) if (!entry.isDirectory) { FileOutputStream(outputFile).use { fos -> zis.copyTo(fos) } } entry = zis.nextEntry } } println("Archiv entpackt nach: $outputDir")}

// Beispielaufruffun main() { extractZipArchive("/pfad/zum/archiv.zip", "/pfad/zum/entpacken")}


Archivinhalte lesen ohne Entpacken

Zum Anzeigen von Dateien innerhalb eines ZIP ohne Extraktion verwenden Sie ZipFile und die Iteration über entries().

import java.io.Fileimport java.util.zip.ZipFile

fun listZipContents(zipFilePath: String) { ZipFile(File(zipFilePath)).use { zipFile -> println("Archivinhalt: ${zipFile.name}") println("Anzahl der Einträge: ${

Empfehlungen