Trabajo con archivos ZIP en Kotlin: ZIP-InputStream y ZipFile

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Trabajo con archivos ZIP en Kotlin: guía completa

En el desarrollo moderno con Kotlin (JVM), a menudo surge la necesidad de comprimir o descomprimir archivos. La biblioteca estándar de Java proporciona potentes herramientas para trabajar con el formato ZIP a través del paquete java.util.zip. En este artículo, analizaremos en detalle cómo crear, leer y modificar archivos ZIP utilizando Kotlin y las capacidades integradas de la JVM.



Clases principales para trabajar con ZIP

Para trabajar con archivos ZIP en Kotlin se utilizan las siguientes clases de java.util.zip:

  • ZipOutputStream — para crear nuevos archivos ZIP y agregarles archivos.
  • ZipInputStream — para leer secuencialmente el contenido del archivo (modo flujo).
  • ZipFile — para acceso aleatorio a las entradas del archivo.
  • ZipEntry — representa una entrada individual (archivo o directorio) dentro del archivo ZIP.

Todas estas clases forman parte de la biblioteca estándar del JDK, por lo que no se requieren dependencias adicionales.



Creación de un archivo ZIP

Para crear un archivo se utiliza ZipOutputStream, que envuelve un FileOutputStream. Cada archivo se agrega a través de 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) { // Creamos una entrada con el nombre del archivo val entry = ZipEntry(file.name) zos.putNextEntry(entry) // Copiamos el contenido del archivo FileInputStream(file).use { fis -> fis.copyTo(zos) } zos.closeEntry() } } } println("Archivo creado: $zipFilePath")}

// Ejemplo de llamadafun main() { createZipArchive("/ruta/a/origen", "/ruta/a/archivo.zip")}


Extracción de un archivo ZIP

La extracción se realiza mediante ZipInputStream. Leemos cada entrada y restauramos los archivos en el disco.

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) // Creamos los directorios padre si es necesario outputFile.parentFile?.mkdirs() // Extraemos solo archivos (no directorios) if (!entry.isDirectory) { FileOutputStream(outputFile).use { fos -> zis.copyTo(fos) } } entry = zis.nextEntry } } println("Archivo extraído en: $outputDir")}

// Ejemplo de llamadafun main() { extractZipArchive("/ruta/a/archivo.zip", "/ruta/a/extraer")}


Lectura del contenido del archivo sin extracción

Para ver los archivos dentro de un ZIP sin extraerlos, use ZipFile e itere sobre entries().

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

fun listZipContents(zipFilePath: String) { ZipFile(File(zipFilePath)).use { zipFile -> println("Contenido del archivo: ${zipFile.name}") println("Total de entradas: ${

Recommendations