Java, Programming

Java: Zip Files or Folders

zip-files-or-folders-using-java
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
// import java.util.zip.Deflater;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
/**
 * @param source file or folder to compress for
 * @param destination zip file located at
 * @param comment the comment of zip file, if comment == null will ignore
 * @param level compression level, reference to Deflater class
 */
public static void compress(File source, File destination, String comment, int level) throws IOException{
  ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(destination));
  zos.setComment(comment);
  zos.setLevel(level);
  compress(zos, source.getParent(), source);
  zos.flush();
  zos.close();
}

// this method will be hidden
private static void compress(ZipOutputStream zos, String rootpath, File source) throws IOException {
  String filename = source.toString().substring(rootpath.length() + 1);
  if (source.isFile()) {
    zos.putNextEntry(new ZipEntry(filename));
    FileInputStream fis = new FileInputStream(source);
    byte[] buffer = new byte[1024];
    for (int length; (length = fis.read(buffer)) > 0; ) {
      zos.write(buffer, 0, length);
    }
    fis.close();
    zos.closeEntry();
  } else if (source.isDirectory()) {
    zos.putNextEntry(new ZipEntry(filename + "/"));
    zos.closeEntry();
    File[] files = source.listFiles();
    for (File file : files) {
      compress(zos, rootpath, file);
    }
  }
}

You could modify above Java code if you would like to enhance for compressing many files or folders.
Seems like this

public static void compress(File[] files, File destination, String comment, int level) throws IOException{
    // ...
}