Java – Crear archivo ZIP

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 debes olivdar 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.