code: public static File unzip(File inputZip) {
      
      File rootDir = null;
      try {
        BufferedOutputStream dest = null;
        BufferedInputStream is = null;
        ZipEntry entry;
        ZipFile zipfile = new ZipFile(inputZip);
        File test = File.createTempFile("aaa", "aaa");
        String tempDir = test.getParent();
        test.delete();
        Enumeration e = zipfile.entries();
        while (e.hasMoreElements()) {
          entry = (ZipEntry) e.nextElement();
          is = new BufferedInputStream(zipfile.getInputStream(entry));
          int count;
          byte data[] = new byte[BUFFER];
          File target = new File(tempDir, entry.getName());
          if (entry.getName().endsWith("/")) {
            target.mkdir();
            if (rootDir == null) rootDir = target;
            continue;
          }
          FileOutputStream fos = new FileOutputStream(target);
          dest = new BufferedOutputStream(fos, BUFFER);
          while ((count = is.read(data, 0, BUFFER)) != -1) {
            dest.write(data, 0, count);
          }
          dest.flush();
          dest.close();
          is.close();
        }
      } catch (Exception e) {
        e.printStackTrace();
      }
      return rootDir;
    }
docs: Unzips the argument into the temp directory and returns the unzipped
  location. The zip must have a root dir element and not just a flat list of files