Ejemplo de Descompresión de Archivos en Java

Bienvenido al ejemplo de descompresión de archivos Java. En el último artículo, aprendimos cómo comprimir archivos y directorios en Java, aquí descomprimiremos el mismo archivo zip creado desde un directorio a otro directorio de salida.

Descompresión de archivos Java

Para descomprimir un archivo zip, necesitamos leer el archivo zip con ZipInputStream y luego leer todas las ZipEntry una por una. Luego, utilizamos FileOutputStream para escribirlas en el sistema de archivos. También necesitamos crear el directorio de salida si no existe y cualquier directorio anidado presente en el archivo zip. Aquí está el programa de descompresión de archivos Java que descomprime el archivo tmp.zip creado anteriormente en el directorio de salida.

package com.journaldev.files;

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

public class UnzipFiles {

    public static void main(String[] args) {
        String zipFilePath = "/Users/pankaj/tmp.zip";
        
        String destDir = "/Users/pankaj/output";
        
        unzip(zipFilePath, destDir);
    }

    private static void unzip(String zipFilePath, String destDir) {
        File dir = new File(destDir);
        // crea el directorio de salida si no existe
        if(!dir.exists()) dir.mkdirs();
        FileInputStream fis;
        // búfer para leer y escribir datos en el archivo
        byte[] buffer = new byte[1024];
        try {
            fis = new FileInputStream(zipFilePath);
            ZipInputStream zis = new ZipInputStream(fis);
            ZipEntry ze = zis.getNextEntry();
            while(ze != null){
                String fileName = ze.getName();
                File newFile = new File(destDir + File.separator + fileName);
                System.out.println("Unzipping to "+newFile.getAbsolutePath());
                // crea directorios para subdirectorios en el zip
                new File(newFile.getParent()).mkdirs();
                FileOutputStream fos = new FileOutputStream(newFile);
                int len;
                while ((len = zis.read(buffer)) > 0) {
                fos.write(buffer, 0, len);
                }
                fos.close();
                // cierra esta ZipEntry
                zis.closeEntry();
                ze = zis.getNextEntry();
            }
            // cierra la última ZipEntry
            zis.closeEntry();
            zis.close();
            fis.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        
    }

}

Una vez que el programa finalice, tendremos todos los contenidos del archivo zip en la carpeta de salida con la misma jerarquía de directorios. El resultado del programa anterior es:

Unzipping to /Users/pankaj/output/.DS_Store
Unzipping to /Users/pankaj/output/data/data.dat
Unzipping to /Users/pankaj/output/data/data.xml
Unzipping to /Users/pankaj/output/data/xmls/project.xml
Unzipping to /Users/pankaj/output/data/xmls/web.xml
Unzipping to /Users/pankaj/output/data.Xml
Unzipping to /Users/pankaj/output/DB.xml
Unzipping to /Users/pankaj/output/item.XML
Unzipping to /Users/pankaj/output/item.xsd
Unzipping to /Users/pankaj/output/ms/data.txt
Unzipping to /Users/pankaj/output/ms/project.doc

Eso es todo sobre el ejemplo de descompresión de archivos Java.

Source:
https://www.digitalocean.com/community/tutorials/java-unzip-file-example