2010-02-16 826 views
6

Nếu ứng dụng của tôi muốn nén tệp kết quả (nhóm tệp) bằng cách sử dụng java theo cách động, các tùy chọn có sẵn trong Java là gì? Khi tôi duyệt Tôi đã có gói java.util.zip để sử dụng, nhưng có cách nào khác để tôi có thể sử dụng nó để triển khai không?Nén và giải nén các thư mục và tệp bằng cách sử dụng Java

+0

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

+0

cảm ơn mã của bạn – gmhk

Trả lời

0

Bạn có thể sử dụng thư viện xử lý tệp ZIP đi kèm với JDK Ngoài ra, hướng dẫn this có thể hữu ích.

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

Việc triển khai Java ban đầu được biết là có một số lỗi liên quan đến mã hóa tệp. Ví dụ, nó không thể xử lý đúng tên tập tin với các âm sắc.

TrueZIP là giải pháp thay thế mà chúng tôi đã sử dụng trong dự án của chúng tôi: https://truezip.dev.java.net/ Kiểm tra tài liệu trên trang web.

0

Java có một java.util.zip.ZipInputStream và cùng với điều này, bạn có thể sử dụng ZipEntry ... Một cái gì đó như

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(); 
    } 
    }