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.*
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
Y si no obtuvimos ningún error la clase comprimirá el archivo y procederá a su descompresión.
enjoy!!!
Este es una continuación de un tutorial pasado [Funciones en PostgreSQL y pgAdmin], así que si quieres entenderlo mucho[...]
JavaMail es una expansión de Java que facilita el envío y recepción de e-mail desde código java. JavaMail implementa el[...]
Un archivo README.md es un archivo de texto escrito en el lenguaje de marcado Markdown, este se encuentra en la raíz de[...]
Alda es un lenguaje de programación desarrollado por Dave Yarwood el cual esta basado en texto para composición musical,[...]
PROBLEMA: Se tiene un JTable con 19 columnas y 50 registros, se desea personalizar el JTable de la siguiente manera:[...]
Problema: Desarrollar un juego en consola con Kotlin que genere un numero aleatorio entre un rango preestablecido y perm[...]