Arbeiten mit ZIP/Archiven in Kotlin: vollständige Anleitung

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 (insbesondere für JVM und Android) besteht häufig die Notwendigkeit, mit ZIP-Archiven zu arbeiten: Logs packen, Ressourcen entpacken, Backups erstellen oder Daten komprimiert zu übertragen. In diesem Artikel werden wir ausführlich erläutern, wie man mit ZIP-Archiven in Kotlin arbeitet, indem man die integrierten Java-Funktionen (Paket java.util.zip) nutzt, sowie praktische Erweiterungen und Alternativen betrachten.



Warum ist die Arbeit mit Archiven in Kotlin wichtig?

  • Platzersparnis — Datenkomprimierung bei der Speicherung auf der Festplatte.
  • Bequeme Übertragung — ein Archiv anstelle vieler Dateien.
  • Sicherheit — Möglichkeit der Verschlüsselung (mit zusätzlichen Bibliotheken).
  • Arbeit mit Ressourcen — Entpacken von Konfigurationen oder Updates.


Wichtige Java-Klassen für die Arbeit mit ZIP

Kotlin ist vollständig kompatibel mit Java, daher verwenden wir für die Arbeit mit Archiven die folgenden Klassen aus java.util.zip:

  • ZipOutputStream — zum Erstellen eines Archivs.
  • ZipInputStream — zum Lesen eines Archivs.
  • ZipEntry — repräsentiert eine einzelne Datei/einen Ordner innerhalb des Archivs.
  • ZipFile — praktische Klasse zum Lesen eines vorhandenen Archivs.


Beispiel 1: Erstellen eines ZIP-Archivs in Kotlin

Wir erstellen ein Archiv, das mehrere Dateien und Ordner enthält. Wir verwenden ZipOutputStream und BufferedOutputStream zur Leistungssteigerung.

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

fun createZipArchive( filesToZip: List<File>, outputZipPath: String) { ZipOutputStream(BufferedOutputStream(FileOutputStream(outputZipPath))).use { zos -> for (file in filesToZip) { if (file.isDirectory) { // Leeren Ordner hinzufügen zos.putNextEntry(ZipEntry("${file.name}/")) zos.closeEntry() continue } // Datei hinzufügen val entry = ZipEntry(file.name) zos.putNextEntry(entry) FileInputStream(file).use { fis -> fis.copyTo(zos) } zos.closeEntry() } } println("Archiv erstellt: $outputZipPath")}

fun main() { val files = listOf( File("document.txt"), File("image.png"), File("configs") // Ordner ) createZipArchive(files, "output.zip")}


Beispiel 2: Lesen des Inhalts eines ZIP-Archivs

Zum Anzeigen der Dateiliste innerhalb des Archivs ist die Verwendung von ZipFile praktisch.

import java.util.zip.ZipFile

fun listZipContents(zipPath: String) { ZipFile(zipPath).use { zip -> println("Inhalt des Archivs $zipPath:") zip.entries().asSequence().forEach { entry -> val size = if (entry.isDirectory) "Ordner" else "${entry.size} Bytes" println("- ${entry.name} ($size)") } }}

fun main() { listZipContents("output.zip")}


Beispiel 3: Entpacken eines ZIP-Archivs

Wir extrahieren alle Dateien aus dem Archiv in einen angegebenen Ordner. Beachten Sie die Behandlung von verschachtelten Ordnern.

import java.io.*import java.util.zip.ZipInputStream

fun extractZip( zipPath: String, outputDir: String = "extracted") { val destDir = File(outputDir) destDir.mkdirs()

ZipInputStream(BufferedInputStream(FileInputStream(zipPath))).use { zis -> var entry = zis.nextEntry while (entry != null) { val file = File(destDir, entry.name) if (entry.isDirectory) { file.mkdirs() } else { // Übergeordnete Ordner erstellen file.parentFile?.mkdirs() BufferedOutputStream(Fi

Empfehlungen