2010-02-16 26 views
6

Si mi aplicación desea comprimir los archivos resultantes (grupo de archivos) usando java de una manera dinámica, ¿cuáles son las opciones disponibles en Java? Cuando busqué, tengo el paquete java.util.zip para usar, pero ¿hay alguna otra manera en que pueda usarlo para implementarlo?Comprimir y descomprimir las carpetas y archivos usando Java

+0

http://devharbor.blogspot.com/2009/01/create-zip -archive-in-java.html y google – ant

+0

gracias por su código – gmhk

Respuesta

0

Puede utilizar la biblioteca de manejo de archivos ZIP que viene con JDK También los tutoriales de this pueden ser útiles.

15
public class FolderZiper { 
    public static void main(String[] a) throws Exception { 
    zipFolder("c:\\a", "c:\\a.zip"); 
    } 

    static public void zipFolder(String srcFolder, String destZipFile) throws Exception { 
    ZipOutputStream zip = null; 
    FileOutputStream fileWriter = null; 

    fileWriter = new FileOutputStream(destZipFile); 
    zip = new ZipOutputStream(fileWriter); 

    addFolderToZip("", srcFolder, zip); 
    zip.flush(); 
    zip.close(); 
    } 

    static private void addFileToZip(String path, String srcFile, ZipOutputStream zip) 
     throws Exception { 

    File folder = new File(srcFile); 
    if (folder.isDirectory()) { 
     addFolderToZip(path, srcFile, zip); 
    } else { 
     byte[] buf = new byte[1024]; 
     int len; 
     FileInputStream in = new FileInputStream(srcFile); 
     zip.putNextEntry(new ZipEntry(path + "/" + folder.getName())); 
     while ((len = in.read(buf)) > 0) { 
     zip.write(buf, 0, len); 
     } 
    } 
    } 

    static private void addFolderToZip(String path, String srcFolder, ZipOutputStream zip) 
     throws Exception { 
    File folder = new File(srcFolder); 

    for (String fileName : folder.list()) { 
     if (path.equals("")) { 
     addFileToZip(folder.getName(), srcFolder + "/" + fileName, zip); 
     } else { 
     addFileToZip(path + "/" + folder.getName(), srcFolder + "/" + fileName, zip); 
     } 
    } 
    } 
} 
3

Se sabe que la implementación original de Java tiene algunos errores relacionados con la codificación de archivos. Por ejemplo, no puede manejar adecuadamente nombres de archivo con diéresis.

TrueZIP es una alternativa que hemos utilizado en nuestro proyecto: https://truezip.dev.java.net/ Consulte la documentación en el sitio.

0

de Java tiene un java.util.zip.ZipInputStream y junto con esto se puede utilizar ZipEntry ... Algo así como

public static void unZipIt(String zipFile, String outputFolder){ 
File folder = new File(zipFile); 
    List<String> files = listFilesForFolder(folder); 
    System.out.println("Size " + files.size()); 
    byte[] buffer = new byte[1024]; 
    try{ 
    Iterator<String> iter = files.iterator(); 
    while(iter.hasNext()){ 
     String file = iter.next(); 
    System.out.println("file name " + file);  
    ZipInputStream zis = new ZipInputStream(new FileInputStream(file)); 
    ZipEntry ze = zis.getNextEntry(); 
    while(ze!=null){ 
      String fileName = ze.getName(); 
      File newFile = new File(outputFolder + File.separator + fileName); 
      System.out.println("file unzip : "+ newFile.getAbsoluteFile()); 
      new File(newFile.getParent()).mkdirs(); 
      FileOutputStream fos = new FileOutputStream(newFile);    
      int len; 
      while ((len = zis.read(buffer)) > 0) { 
      fos.write(buffer, 0, len); 
      } 
      fos.close(); 
      ze = zis.getNextEntry(); 
    } 
    zis.closeEntry(); 
    zis.close(); 
    System.out.println("Done"); 
    } 
    }catch(IOException ex){ 
     ex.printStackTrace(); 
    } 
    } 
Cuestiones relacionadas