Para crear un archivo ZIP en Java no requerimos importar librerías adicionales en Maven, el paquete util provee de las clases necesarias para crear un archivo ZIP.
import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream;
Usaremos un archivo cualquiera para comprimir.
El código:
package com.decodigo; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; /** * * @author decodigo.com */ public class CrearZip { public static void main( String[] args ) { byte[] buffer = new byte[1024]; try{ FileOutputStream fos = new FileOutputStream("/ruta_archivos/archivo_zip.zip"); ZipOutputStream zos = new ZipOutputStream(fos); ZipEntry ze= new ZipEntry("ExcelEjemplo.xlsx"); zos.putNextEntry(ze); FileInputStream in = new FileInputStream("/ruta_archivos/ExcelEjemplo.xlsx"); int len; while ((len = in.read(buffer)) > 0) { zos.write(buffer, 0, len); } in.close(); zos.closeEntry(); zos.close(); System.out.println("Hecho"); }catch(IOException ex){ ex.printStackTrace(); } } }
Las líneas en las que debes poner especial atención son las siguientes:
La clase FileOutputStream es usada para crear el archivo ZIP con nuestros archivos, que en este caso sólo es uno.
FileOutputStream fos = new FileOutputStream("/ruta_archivos/archivo_zip.zip");
La clase ZipOutputStream permite comprimir cada una de las entradas generadas a partir de la clase ZipEntry con el nombre del archivo original o el que desees. Desde luego hay que crear un FileInputStream donde especificamos la ruta del archivo que queremos comprimir.
ZipOutputStream zos = new ZipOutputStream(fos); ZipEntry ze= new ZipEntry("ExcelEjemplo.xlsx"); zos.putNextEntry(ze); FileInputStream in = new FileInputStream("/ruta_archivos/ExcelEjemplo.xlsx");
Escribiremos el contenido de nuestro archivo fuente con la función write y ZipOutputStream se encarga de hacer la compresión.
int len; while ((len = in.read(buffer)) > 0) { zos.write(buffer, 0, len); } in.close(); zos.closeEntry(); zos.close();
No olvides cerrar los streams y la entrada.
Si corremos el ejemplo obtenemos los siguiente:
El archivo archivo_zip.zip contendrá al archivo de ejemplo y desde luego tu puedes usar cualquier otro.
Esperamos que este ejemplo de crear un archivo ZIP en Java te sea de utilidad.
Más información en inglés: https://geekole.com/create-zip-files-in-java/