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: ${ Auch in der Bibliothek
PHP-DI für PHP: Komplettguide mit Beispielen
Java Aufgabenplaner: Quartz Scheduler – vollständige Anleitung
Geolokalisierung und Karten in Swift für iOS/macOS: vollständiger Leitfaden