Es posible que querramos tener nuestro propio programa compresor de ficheros multiplataforma para utilizarlo, para ello podemos cumplir con el cometido gracias a Java y un poco de código.
El formato más estándar para hacerlo es el .ZIP (aunque no sea el de mejor compresión), para ellos crearemos una clase que reciba el nombre de los ficheros a crear y a zippear.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 | import java.util.zip.*; import java.io.*; /** * * @author GeekZero */ public class Archivos { private static final int BUFFER_SIZE = 1024; public void Zippear(String pFile, String pZipFile) throws Exception { // objetos en memoria FileInputStream fis = null; FileOutputStream fos = null; ZipOutputStream zipos = null; // buffer byte[] buffer = new byte[BUFFER_SIZE]; try { // fichero a comprimir fis = new FileInputStream(pFile); // fichero contenedor del zip fos = new FileOutputStream(pZipFile); // fichero comprimido zipos = new ZipOutputStream(fos); ZipEntry zipEntry = new ZipEntry(pFile); zipos.putNextEntry(zipEntry); int len = 0; // zippear while ((len = fis.read(buffer, 0, BUFFER_SIZE)) != -1) zipos.write(buffer, 0, len); // volcar la memoria al disco zipos.flush(); } catch (Exception e) { throw e; } finally { // cerramos los files zipos.close(); fis.close(); fos.close(); } // end try } // end Zippear public void UnZip(String pZipFile, String pFile) throws Exception { BufferedOutputStream bos = null; FileInputStream fis = null; ZipInputStream zipis = null; FileOutputStream fos = null; try { fis = new FileInputStream(pZipFile); zipis = new ZipInputStream(new BufferedInputStream(fis)); if (zipis.getNextEntry() != null) { int len = 0; byte[] buffer = new byte[BUFFER_SIZE]; fos = new FileOutputStream(pFile); bos = new BufferedOutputStream(fos, BUFFER_SIZE); while ((len = zipis.read(buffer, 0, BUFFER_SIZE)) != -1) bos.write(buffer, 0, len); bos.flush(); } else { throw new Exception("El zip no contenia fichero alguno"); } // end if } catch (Exception e) { throw e; } finally { bos.close(); zipis.close(); fos.close(); fis.close(); } // end try } // end UnZip // ejemplo de uso public static void main(String[] args) throws Exception { try { Archivos arch = new Archivos(); arch.Zippear("devtroce.jpg", "devtroce.zip"); System.out.println("Comprimido!"); arch.UnZip("devtroce.zip", "new_devtroce.jpg"); System.out.println("Descomprimido!"); } catch (Exception e) { e.printStackTrace(); } } }// end class |
Articulos Relacionados:









en
en
en
en
Muchas gracias, funciona, solamente tengo una dificultad que mi archivo esta una ruta determinada, la cual indico como parámetro de entrada, pero al crearse el archivo ZIP crea por dentro de este la misma ruta y deseo que “no tenga” ninguna ruta de salida. Estoy creando un archivo KMZ (Google earth) y así debe ser su estructura, simplmenete zipeado sin ruta y con nombre doc.kml
Nuevamente Muchas Gracias