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;
public static void compress(File source, File destination) throws IOException{
compress(source, destination, null, Deflater.DEFAULT_COMPRESSION);
}
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();
}
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);
}
}
}