Travailler avec les archives ZIP en Kotlin : ZIP-InputStream et ZipFile

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Travailler avec les archives ZIP en Kotlin : guide complet

Dans le développement moderne avec Kotlin (JVM), il est souvent nécessaire de compresser ou décompresser des fichiers. La bibliothèque standard Java fournit des outils puissants pour travailler avec le format ZIP via le package java.util.zip. Dans cet article, nous allons détailler comment créer, lire et modifier des archives ZIP en utilisant Kotlin et les capacités intégrées de la JVM.



Classes principales pour la manipulation des ZIP

Pour travailler avec les archives ZIP en Kotlin, on utilise les classes suivantes de java.util.zip :

  • ZipOutputStream — pour créer de nouvelles archives ZIP et y ajouter des fichiers.
  • ZipInputStream — pour lire séquentiellement le contenu d'une archive (mode flux).
  • ZipFile — pour un accès aléatoire aux entrées de l'archive.
  • ZipEntry — représente une entrée individuelle (fichier ou répertoire) dans l'archive.

Toutes ces classes font partie de la bibliothèque standard JDK, donc aucune dépendance supplémentaire n'est nécessaire.



Création d'une archive ZIP

Pour créer une archive, on utilise ZipOutputStream, qui enveloppe un FileOutputStream. Chaque fichier est ajouté via ZipEntry.

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) { // Créer une entrée avec le nom du fichier val entry = ZipEntry(file.name) zos.putNextEntry(entry) // Copier le contenu du fichier FileInputStream(file).use { fis -> fis.copyTo(zos) } zos.closeEntry() } } } println("Archive créée : $zipFilePath")}

// Exemple d'appelfun main() { createZipArchive("/chemin/vers/source", "/chemin/vers/archive.zip")}


Extraction d'une archive ZIP

L'extraction se fait via ZipInputStream. On lit chaque entrée et on restaure les fichiers sur le disque.

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) // Créer les répertoires parents si nécessaire outputFile.parentFile?.mkdirs() // Extraire uniquement les fichiers (pas les répertoires) if (!entry.isDirectory) { FileOutputStream(outputFile).use { fos -> zis.copyTo(fos) } } entry = zis.nextEntry } } println("Archive extraite dans : $outputDir")}

// Exemple d'appelfun main() { extractZipArchive("/chemin/vers/archive.zip", "/chemin/vers/extraction")}


Lecture du contenu d'une archive sans extraction

Pour visualiser les fichiers dans un ZIP sans les extraire, utilisez ZipFile et l'itération sur entries().

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

fun listZipContents(zipFilePath: String) { ZipFile(File(zipFilePath)).use { zipFile -> println("Contenu de l'archive : ${zipFile.name}") println("Nombre total d'entrées : ${

Recommendations