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
\También en la biblioteca
Configuración de aplicaciones Rust: bibliotecas config, envy y dotenvy
Limitación de Tasa en TypeScript: bibliotecas, herramientas y ejemplos de implementación
Autorización y autenticación en Java: Spring Security y JWT