Zip и распаковать папки и файлы с помощью Java - PullRequest
6 голосов
/ 16 февраля 2010

Если Мое Приложение хочет сжать Результирующие файлы (группу Файлов) динамически, используя java, каковы доступные варианты в Java? Когда я просмотрел, у меня есть пакет java.util.zip для использования, но есть ли другой способ, которым я могу использовать его для реализации?

Ответы [ 4 ]

15 голосов
/ 16 февраля 2010
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 голосов
/ 16 февраля 2010

Известно, что оригинальная реализация Java имеет некоторые ошибки, связанные с кодированием файлов. Например, он не может правильно обрабатывать имена файлов с помощью умлаутов.

TrueZIP - это альтернатива, которую мы использовали в нашем проекте: https://truezip.dev.java.net/ Проверьте документацию на сайте.

0 голосов
/ 23 ноября 2015

Java имеет java.util.zip.ZipInputStream, и наряду с этим вы можете использовать ZipEntry ... Что-то вроде

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(); 
   }
  }
0 голосов
/ 16 февраля 2010

Вы можете использовать библиотеку обработки файлов ZIP, которая поставляется с JDK Также этот учебник может быть полезным.

...