Java – Leer archivo ZIP

Para leer un archivo ZIP en Java no requerimos importar librerías adicionales en Maven, el paquete util provee de las clases necesarias para extraer información de un archivo ZIP.

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

Usaremos este archivo ZIP con cuatro archivos de texto, pero en principio puedes usar cualquier archivo ZIP.




El código:

package com.decodigo;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

/**
 *
 * @author decodigo.com
 */

public class LeerZip {
    List listaArchivos;
    private static final String ARCHIVO_ZIP = "/home/decodigo/Documentos/java/archivos/archivos.zip";
    private static final String RUTA_SALIDA = "/home/decodigo/Documentos/java/archivos/";
    public static void main(String[] args) {
        LeerZip leerZip = new LeerZip();
        leerZip.unZip(ARCHIVO_ZIP, RUTA_SALIDA);
    }

    public void unZip(String archivoZip, String rutaSalida) {
        byte[] buffer = new byte[1024];
        try {
            File folder = new File(RUTA_SALIDA);
            if (!folder.exists()) {
                folder.mkdir();
            }

            ZipInputStream zis = new ZipInputStream(new FileInputStream(archivoZip));
            ZipEntry ze = zis.getNextEntry();
            while (ze != null) {
                String nombreArchivo = ze.getName();
                File archivoNuevo = new File(rutaSalida + File.separator + nombreArchivo);
                System.out.println("archivo descomprimido : " + archivoNuevo.getAbsoluteFile());
                new File(archivoNuevo.getParent()).mkdirs();
                FileOutputStream fos = new FileOutputStream(archivoNuevo);
                int len;
                while ((len = zis.read(buffer)) > 0) {
                    fos.write(buffer, 0, len);
                }
                fos.close();
                ze = zis.getNextEntry();
            }
            zis.closeEntry();
            zis.close();
            System.out.println("Listo");
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }
}

Las líneas en las que debes poner especial atención son las siguientes:

Las rutas del archivo ZIP de la cual vas a extraer información y la ruta donde serán creados los archivos extraidos del ZIP.

private static final String ARCHIVO_ZIP = "/home/decodigo/Documentos/java/archivos/archivos.zip";
private static final String RUTA_SALIDA = "/home/decodigo/Documentos/java/archivos/";

Los archivos en el ZIP se pueden navegar usando el método getNextEntry.

ZipEntry ze = zis.getNextEntry();

En un ciclo while extraes el nombre del archivo para crear posteriormente el archivo con el mismo nombre:

String nombreArchivo = ze.getName();

Posteriormente crear el archivo descomprimido con un FileOutputStream.

new File(archivoNuevo.getParent()).mkdirs();
FileOutputStream fos = new FileOutputStream(archivoNuevo);
int len;
while ((len = zis.read(buffer)) > 0) {
    fos.write(buffer, 0, len);
}
fos.close();

Si corremos el ejemplo obtenemos este resultado:

Como resultado puedes ver que los cuatro archivos de texto contenidos en nuestro archivo ZIP están sobre la ruta que especificamos en el código.

El ejemplo es muy sencillo, pero te permitirá comenzar fácilmente con la apertura de archivos ZIP.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *