Java – Comprimir archivos a un zip en memoria

julio 3, 2014

Comprimir archivos en Java es realmente sencillo, como se explica aquí basta con

1.- Leer un archivo
2.- Agregar el nombre del archivo a una ZipEntry y escribirla al ZipOutputStream

lo que se nos dificulta a veces es el primer paso, leer un archivo. Sobretodo cuando no existe un archivo sino que almacenamos en la base de datos, en un campo BLOB, los archivos que queremos comprimir.

En este caso debemos primero leer de la base de datos el archivo

   byte[] documento = null;
   Connection con = ...
   try{
      PreparedStatement sql = ...
      sql.setParameters(...);
      ResultSet rst = sql.executeQuery();
      if(rst.next()){
         documento = rst.getBytes(FIELD_DOCUMENTO);
         ...
      }
   }finally{
      if(con != null){
         con.close();
      }
   }

Una vez que leemos los archivos hay que crear nuestro archivo comprimido zip utilizando la clase ByteArrayOutputStream

    private byte[] zip(List documentos) throws IOException {
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        ZipOutputStream zout = null;
        try {
            zout = new ZipOutputStream(bos);
            for (Documento doc : documentos) {
                ZipEntry ze = new ZipEntry(doc.getId() + ".rtf");
                zout.putNextEntry(ze);
                zout.write(doc.getContenido());
                zout.closeEntry();
            }
        } finally {
            if (zout != null) {
                zout.close();
            }
        }
        return bos.toByteArray();
    }

Fuentes:
http://www.mkyong.com/java/how-to-compress-files-in-zip-format/
http://stackoverflow.com/questions/2330569/closing-a-bytearrayoutputstream-has-no-effect

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: