Trabajo con archivos ZIP en Java: guía completa de java.util.zip

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 Java: guía completa



En el desarrollo moderno con Java, a menudo surge la necesidad de empaquetar y descomprimir archivos. ZIP es uno de los formatos de compresión más populares, compatible con la biblioteca estándar de Java. El paquete integrado java.util.zip proporciona todas las herramientas necesarias para trabajar con archivos ZIP sin instalar dependencias de terceros.



Clases principales del paquete java.util.zip



El paquete java.util.zip incluye varias clases clave para trabajar con archivos:



  • ZipOutputStream — para crear archivos ZIP y escribir archivos en ellos
  • ZipInputStream — para leer el contenido de archivos ZIP
  • ZipEntry — representa una entrada individual (archivo o directorio) dentro del archivo
  • ZipFile — para acceso directo a las entradas del archivo por nombre
  • Deflater/Inflater — clases de bajo nivel para compresión/descompresión de datos


Creación de un archivo ZIP



Para crear un archivo se utiliza ZipOutputStream. Cada archivo agregado se representa como un ZipEntry. Veamos un ejemplo que empaqueta varios archivos en un solo archivo:



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

public class CreateZipExample { public static void main(String[] args) { // Array de archivos para archivar String[] sourceFiles = {"file1.txt", "file2.txt", "image.png"}; String zipFileName = "archive.zip";

try (ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(zipFileName))) { byte[] buffer = new byte[1024];

for (String filePath : sourceFiles) { File file = new File(filePath); // Creamos una entrada en el archivo ZipEntry zipEntry = new ZipEntry(file.getName()); zos.putNextEntry(zipEntry);

// Leemos el archivo y lo escribimos en el archivo try (FileInputStream fis = new FileInputStream(file)) { int length; while ((length = fis.read(buffer)) > 0) { zos.write(buffer, 0, length); } } zos.closeEntry(); } System.out.println("Archivo creado: " + zipFileName); } catch (IOException e) { e.printStackTrace(); } }}


Extracción de un archivo ZIP



Para leer un archivo se utiliza ZipInputStream. El método getNextEntry() devuelve secuencialmente todas las entradas del archivo:



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

public class ExtractZipExample { public static void main(String[] args) { String zipFileName = "archive.zip"; String outputDir = "extracted_files";

new File(outputDir).mkdir();

try (ZipInputStream zis = new ZipInputStream(new FileInputStream(zipFileName))) { ZipEntry entry; byte[] buffer = new byte[1024];

while ((entry = zis.getNextEntry()) != null) { String fileName = entry.getName(); File newFile = new File(outputDir + File.separator + fileName);

// Creamos directorios si es necesario new File(newFile.getParent()).mkdirs();

try (FileOutputStream fos = new FileOutputStream(newFile)) { int length; while ((length = zis.read(buffer)) > 0) { fos.write(buffer, 0, length); } } zis.closeEntry(); System.out.println("Extraído: " + fileName); } } catch (IOException e) { e.printStackTrace(); } }}


Trabajo con ZipFile para acceso aleatorio

\

Recommendations