code: package it.mibiolab.clapp;
  
  import java.io.File;
  import java.io.FileInputStream;
  import java.io.FileOutputStream;
  import java.io.IOException;
  import java.util.ArrayList;
  import java.util.List;
  import java.util.zip.ZipEntry;
  import java.util.zip.ZipOutputStream;
  
  
  // Thanks to https://stackoverflow.com/a/15970455
  public class ZipUtils {
  
      private static final String TAG = "ZipUtils";
  
      private List <String> fileList;
      private final String sourceFolder;
  
      public ZipUtils(String sourceFolder) {
          this.fileList = new ArrayList<>();
          this.sourceFolder = sourceFolder;
      }
  
      public void zipIt(File zipFile) throws IOException {
          this.generateFileList(new File(sourceFolder));
  
          byte[] buffer = new byte[4096];
          String source = new File(sourceFolder).getName();
          FileOutputStream fos = null;
          ZipOutputStream zos = null;
          try {
              fos = new FileOutputStream(zipFile);
              zos = new ZipOutputStream(fos);
  
              //System.out.println("Output to Zip : " + zipFile);
              FileInputStream in = null;
  
              for (String file: this.fileList) {
                  //System.out.println("File Added : " + file);
                  ZipEntry ze = new ZipEntry(source + File.separator + file);
                  zos.putNextEntry(ze);
                  try {
                      in = new FileInputStream(sourceFolder + File.separator + file);
                      int len;
                      while ((len = in .read(buffer)) > 0) {
                          zos.write(buffer, 0, len);
                      }
                  } finally {
                      in.close();
                  }
              }
  
              zos.closeEntry();
              //System.out.println("Folder successfully compressed");
  
          } finally {
              if(zos != null) {
                  zos.close();
              }
          }
      }
  
      private void generateFileList(File node) {
          // add file only
          if (node.isFile()) {
              fileList.add(generateZipEntry(node.toString()));
          }
  
          if (node.isDirectory()) {
              String[] subNote = node.list();
              for (String filename: subNote) {
                  generateFileList(new File(node, filename));
              }
          }
      }
  
      private String generateZipEntry(String file) {
          return file.substring(sourceFolder.length() + 1/*, file.length()*/);
      }
  }
  
  