Pages

Crear ZIP en JAVA

jueves, 30 de enero de 2014

En esta ocasión les entregaré una clase que les permitirá comprimir archivos fácilmente.

Dentro de la clase ZIP.JAVA se encuentran dos métodos:
  1. String createZip(Map files,String ruta) : Permite crear un ZIP del listado de archivos incluidos en un MAP, dicho ZIP será creado en la ruta especificada por parámetros y se definirá como nombre de archivo la fecha actual ("ddMMyyyyHHmmss").
  2. byte[] createZip(Map files): Permite crear un ZIP del listado de archivos incluidos en un MAP, dicho ZIP será creado y convertido a un ARRAY deBYTE el cual luego será devuelto para su manejo en memoria.

La Implementación se incluye a continuación:

import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
 
public class ZIPTest {
 
 public static void main(String args[]) throws IOException{
 Map listadoArchivos = new HashMap();
 //Obtener archivos a comprimir
 File file1 = new File("C://reports//03092013145138-Solicitud_Pension_Vejez_EMPART.pdf");
 File file2 = new File("C://reports//03092013121037-Solicitud_Pension_Vejez_EMPART.pdf");
 //Incluir los archivos en el MAP
 listadoArchivos.put("Archivo1.pdf", org.apache.commons.io.FileUtils.readFileToByteArray(file1));
 listadoArchivos.put("Archivo2.pdf", org.apache.commons.io.FileUtils.readFileToByteArray(file2));
 //Enviar Listado de Archivos y Futura Ruta
 String rutaZip = ZIP.createZip(listadoArchivos,"C://reports//");
 System.out.println("EL ZIP ha sido creado, revisar la Ruta: "+rutaZip);
 }
}

Código clase ZIP

import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Iterator;
import java.util.Map;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
 
/**
 * Clase que permite crear ZIPs en base a un listado de Archivos
 *
 * @author GRivas gustavo.cuentas@live.com
 *
 */
public class ZIP {
 
        /**
         * Metodo que permite generar un ZIP con el listado de archivos enviados en un MAP
         *
         * @param files Map con el Listado de Archivos a Comprimir
         * @param ruta Ruta donde será almacenado el ZIP
         * @return Ruta del ZIP creado
         * @throws IOException
         */
        public static String createZip(Map files,String ruta) throws IOException {  
                SimpleDateFormat sdfs = new SimpleDateFormat("ddMMyyyyHHmmss");
                Date date = new Date();
                String rutaFinal = ruta.concat(sdfs.format(date)).concat(".zip");
                FileOutputStream fout = new FileOutputStream(rutaFinal);
            ZipOutputStream zipfile = new ZipOutputStream(fout);  
            Iterator i = files.keySet().iterator();  
            String fileName = null;  
            ZipEntry zipentry = null;  
            while (i.hasNext()) {  
                fileName = (String) i.next();  
                zipentry = new ZipEntry(fileName);  
                zipfile.putNextEntry(zipentry);  
                zipfile.write((byte[]) files.get(fileName));  
            }  
            zipfile.close();
            return rutaFinal;
        }
       
        /**
         * Metodo que permite generar un ZIP con el listado de archivos enviados en un MAP
         * que retonar array de Bytes para manejar el archivo
         *
         * @param files Listado de Archivos a Comprimir
         * @return byte[] Representa el ZIP
         * @throws IOException
         */
        public static byte[] createZip(Map files) throws IOException {  
            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            ZipOutputStream zipfile = new ZipOutputStream(bos);  
            Iterator i = files.keySet().iterator();  
            String fileName = null;  
            ZipEntry zipentry = null;  
            while (i.hasNext()) {  
                fileName = (String) i.next();  
                zipentry = new ZipEntry(fileName);  
                zipfile.putNextEntry(zipentry);  
                zipfile.write((byte[]) files.get(fileName));  
            }  
            zipfile.close();
            return bos.toByteArray();  
        }
}
 

Temas