code: public void processFile(File zipFile, File destDir) throws IOException {
          if (!destDir.exists()) {
              throw new IOException("Destionation directory '" + destDir + "' does not exists, or can't be read!");
          }
          ZipFile f = null;
          try {
              f = new ZipFile(zipFile);
              Map<String, ZipEntry> fEntries = getEntries(f);
              String[] names = fEntries.keySet().toArray(new String[] {});
              if (sortNames) {
                  Arrays.sort(names);
              }
              // copy all files
              for (int i = 0; i < names.length; i++) {
                  String name = names[i];
                  ZipEntry e = fEntries.get(name);
                  copyFileEntry(destDir, f, e);
              }
          } catch (IOException ioe) {
              String msg = ioe.getMessage();
              if (msg.indexOf(zipFile.toString()) < 0) {
                  msg += " - " + zipFile.toString();
              }
              throw new IOException(msg);
          } finally {
              if (f != null) {
                  try {
                      f.close();
                  } catch (IOException ioe) {
                  }
              }
          }
      }
docs: Explode source ZIP or JAR file into a target directory
  
  @param zipFile
  source file
  @param destDir
  target directory (should already exist)
  @exception IOException
  error creating a target file