Trabajo con archivos ZIP en Java: java.util.zip y Zip4j

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: java.util.zip y Zip4j



La compresión y el archivado de datos es una de las tareas clave en el desarrollo de aplicaciones en Java. Los archivos ZIP se utilizan ampliamente para empaquetar archivos, transferir datos a través de la red y ahorrar espacio en disco. En este artículo, analizaremos en detalle dos enfoques principales para trabajar con archivos ZIP en Java: el paquete integrado java.util.zip y la potente biblioteca de terceros Zip4j.



El paquete estándar java.util.zip



Desde JDK 1.1, Java incluye el paquete java.util.zip, que proporciona clases básicas para trabajar con el formato ZIP. Las clases principales son:

  • ZipOutputStream — para crear archivos ZIP
  • ZipInputStream — para leer archivos ZIP
  • ZipEntry — representa una entrada individual (archivo o carpeta) dentro del archivo
  • ZipFile — para acceso aleatorio al contenido del archivo


Creación de un archivo ZIP con java.util.zip



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

public class ZipCreator { public static void main(String[] args) throws IOException { String sourceFile = "document.txt"; String zipName = "archive.zip";

try (FileOutputStream fos = new FileOutputStream(zipName); ZipOutputStream zos = new ZipOutputStream(fos)) {

File fileToZip = new File(sourceFile); FileInputStream fis = new FileInputStream(fileToZip);

ZipEntry zipEntry = new ZipEntry(fileToZip.getName()); zos.putNextEntry(zipEntry);

byte[] buffer = new byte[1024]; int length; while ((length = fis.read(buffer)) >= 0) { zos.write(buffer, 0, length); } zos.closeEntry(); fis.close(); } System.out.println("Archivo creado: " + zipName); }}


Extracción de un archivo ZIP



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

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

new File(outputDir).mkdirs();

try (ZipInputStream zis = new ZipInputStream(new FileInputStream(zipFile))) { ZipEntry entry; while ((entry = zis.getNextEntry()) != null) { File newFile = new File(outputDir, entry.getName()); new File(newFile.getParent()).mkdirs();

FileOutputStream fos = new FileOutputStream(newFile); byte[] buffer = new byte[1024]; int len; while ((len = zis.read(buffer)) > 0) { fos.write(buffer, 0, len); } fos.close(); zis.closeEntry(); } } System.out.println("Extracción completada en la carpeta: " + outputDir); }}


Limitaciones de java.util.zip:

  • Sin soporte para cifrado (protección por contraseña)
  • Soporte limitado para Unicode en nombres de archivos (antes de Java 7)
  • Sin soporte para ZIP64 en archivos > 4 GB (antes de Java 8)
  • Dificultad para trabajar con subcarpetas


Biblioteca Zip4j — funcionalidades avanzadas



Zip4j es una popular biblioteca de terceros de código abierto que resuelve la mayoría de las limitaciones del paquete estándar. Para usarla, agregue la dependencia en Maven:



<dependency>    <groupId>net.lingala.zip4j</groupId>    <artifactId>zip4j</artifactId>    <version>2.11.5</version></dependency>


Creación de un archivo ZIP cifrado con Zip4j



import net.lingala.zip4j.ZipFile;import net.lingala.zip4j.model.ZipParam                    

Recommendations