Aprende Java Aprende Php Aprende C++ Aprende HTML 5 Aprende JavaScript Aprende JSON Aprende MySQL Aprende SQLServer Aprende Visual Basic 6 Aprende PostgreSQL Aprende SQLite Aprende Redis Aprende Kotlin Aprende XML Aprende Linux VSC Aprende Wordpress Aprende Laravel Aprende VueJS Aprende JQuery Aprende Bootstrap Aprende Netbeans Aprende Android
Sigueme en Facebook Sigueme en Twitter Sigueme en Instagram Sigueme en Youtube Sigueme en TikTok Sigueme en Whatsapp
Home / Java / Compresión y descompresión de archivos con GZIP

Compresión y descompresión de archivos con GZIP

Por jc mouse miércoles, enero 30, 2019

En este post veremos un ejemplo de como comprimir y descomprimir archivos con el método de compresión GZIP  y el paquete de Java java.util.zip.*

gzip icon

java.util.zip: Este paquete ofrece clases para leer y escribir los formatos de archivo ZIP y GZIP estándar. También incluye clases para comprimir y descomprimir datos usando el algoritmo de compresión DEFLATE, que es usado por los formatos de archivo ZIP y GZIP. Además, tiene clases para calcular las sumas de comprobación CRC-32 y Adler-32 de flujos de entrada arbitrarios.

Nuestro proyecto consiste en una clase con dos métodos tanto para comprimir como descomprimir archivos.  La clase es la siguiente:

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
/**
 * @see https://www.jc-mouse.net
 * @author mouse
 */
public class DemoGZIP {

    private final byte[] BUFFER = new byte[1024];

    /**
     * @param archivo Archivo a comprimir
     *      El archivo se comprime con el mismo nombre del archivo origen seguido de la extension *.zip
     * @return boolean 
     *      TRUE tuvo exito
     *      FALSE no se pudo comprimir
     */
    public boolean comprimir(File archivo) {                
        try (GZIPOutputStream  out = new GZIPOutputStream (new FileOutputStream(archivo.getAbsolutePath() + ".zip"));
                FileInputStream in = new FileInputStream(archivo)) {
            int len;
            while ((len = in.read(BUFFER)) != -1) {
                out.write(BUFFER, 0, len);
            }
            out.close();
        } catch (IOException ex) {
            System.err.println(ex.getMessage());
            return false;
        }
        return true;
    }

    /**
     * @param archivo Archivo a comprimir de la forma archivo.extension.zip
     * @return boolean 
     *      TRUE tuvo exito
     *      FALSE no se pudo descomprimir
     */
    public boolean descomprimir(File archivo) {
        //extrae la extension *.zip
        String salida = archivo.getAbsolutePath().replaceFirst("[.][^.]+$", "");        
        try (GZIPInputStream in = new GZIPInputStream(new FileInputStream(archivo));
                FileOutputStream out = new FileOutputStream(salida)) {            
            int len;
            while ((len = in.read(BUFFER)) != -1) {
                out.write(BUFFER, 0, len);
            }
            out.close();
        } catch (IOException ex) {      
            System.err.println(ex.getMessage());
            return false;
        }
        return true;
    }

}

Para probar nuestra clase, podemos hacerlo de la siguiente manera:

DemoGZIP demoGZIP = new DemoGZIP();
        if(demoGZIP.comprimir(new File("E:\\tmp\\presentacion.pptx"))){
            if(demoGZIP.descomprimir(new File("E:\\tmp\\presentacion.pptx.zip"))){
                System.out.println("completado...");
            }
        }

Esto creara un archivo comprimido «presentacion.pptx.zip» como podemos ver a continuación

gzip java file

Y si no obtuvimos ningún error la clase comprimirá el archivo y procederá a su descompresión.

enjoy!!!

Tags

Artículos similares

GridView con imagenes en miniatura

Entre las muchas aplicaciones que hay en la playstore de google están las galerías de fotos de chicas 🙂 que tantos nos e[...]

Mapa Interactivo: Así voto Bolivia 2025

Mauricio Foronda, desarrollador y cientista en datos, presenta una aplicación web interactiva que permite al público apr[...]

Crea un componente swing para cargar fotos en miniaturas

En este tutorial crearemos un componente swing para java que podremos usar en cualquiera de nuestros proyectos, el compo[...]

Animación de bicho feo en java2D

Java2d nos permite manipular imagenes y asi poder crear animaciones sencillas como muestra el siguiente video. Puedes de[...]

Lo nuevo de HTTP Client

Una de las novedades de Java 9 y 10 aunque por el momento en modo de prueba (jdk.incubator.http) es el Cliente HTTP el c[...]

Operador de Complemento bit a bit «~»

Operador de Complemento bit a bit unario Entre los operadores a nivel de bits de uso más común en java tenemos al operad[...]