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 de java.util.zip



El archivado de datos es una de las tareas básicas en el desarrollo de software. Java proporciona un conjunto de herramientas potente y flexible para trabajar con archivos ZIP "de fábrica" — el paquete java.util.zip. En este artículo, analizaremos en detalle cómo crear, extraer y modificar archivos ZIP utilizando las herramientas estándar de Java.



Clases principales del paquete java.util.zip

El paquete java.util.zip contiene las clases clave para trabajar con archivos:

  • ZipOutputStream — para crear archivos ZIP (escribir archivos en el archivo)
  • ZipInputStream — para leer y extraer archivos ZIP
  • ZipEntry — representa una entrada individual (archivo/directorio) dentro del archivo
  • ZipFile — para acceso directo al contenido del archivo sin extracción completa
  • CheckedOutputStream / CheckedInputStream — para verificar la integridad de los datos (CRC32, Adler32)


Creación de un archivo ZIP (ZipOutputStream)

Para crear un archivo se utiliza ZipOutputStream, que envuelve un FileOutputStream normal. Cada archivo agregado se representa mediante un objeto ZipEntry.



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

public class CreateZip { public static void main(String[] args) throws IOException { String[] sourceFiles = {"file1.txt", "file2.txt", "image.png"}; String zipName = "archive.zip";

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

for (String filePath : sourceFiles) { File file = new File(filePath); FileInputStream fis = new FileInputStream(file);

// Creamos una entrada en el archivo ZipEntry zipEntry = new ZipEntry(file.getName()); zos.putNextEntry(zipEntry);

// Escribimos el contenido del archivo int length; while ((length = fis.read(buffer)) > 0) { zos.write(buffer, 0, length); } zos.closeEntry(); fis.close(); System.out.println("Agregado: " + file.getName()); } } System.out.println("Archivo creado: " + zipName); }}


Detalles importantes al crear un archivo:

  • Llame siempre a putNextEntry() antes de escribir datos y a closeEntry() después
  • Para agregar un directorio vacío, use ZipEntry(name + "/") — el nombre debe terminar en "/"
  • Use try-with-resources para cerrar automáticamente los flujos


Extracción de un archivo ZIP (ZipInputStream)

Para extraer archivos de un archivo se utiliza ZipInputStream. La lectura se realiza secuencialmente — entrada por entrada.



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

public class ExtractZip { public static void main(String[] args) throws IOException { String zipFile = "archive.zip"; String outputDir = "extracted";

File dir = new File(outputDir); if (!dir.exists()) dir.mkdirs();

try (ZipInputStream zis = new ZipInputStream(new FileInputStream(zipFile))) { 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 los directorios padre new File(newFile.getParent()).mkdirs();

// Escribimos el archivo FileOutputStream fos = new FileOutputStream(newFile); int length;

Recommendations