6

私のアプリケーションが動的な方法で Java を使用して結果ファイル (ファイルのグループ) を圧縮したい場合、Java で利用可能なオプションは何ですか? 参照すると、使用する java.util.zip パッケージを取得しましたが、それを使用して実装できる他の方法はありますか?

4

4 に答える 4

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);
      }
    }
  }
}
于 2010-02-16T09:43:03.333 に答える
0

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(); 
   }
  }
于 2015-11-23T08:36:53.577 に答える