code: public static void iterate(File zip, ZipInfoCallback action) {
      ZipFile zf = null;
      try {
        zf = new ZipFile(zip);
  
        Enumeration<? extends ZipEntry> en = zf.entries();
        while (en.hasMoreElements()) {
          ZipEntry e = (ZipEntry) en.nextElement();
          try {
            action.process(e);
          }
          catch (IOException ze) {
            throw new ZipException("Failed to process zip entry '" + e.getName() + " with action " + action, ze);
          }
          catch (ZipBreakException ex) {
            break;
          }
        }
      }
      catch (IOException e) {
        throw ZipExceptionUtil.rethrow(e);
      }
      finally {
        closeQuietly(zf);
      }
    }
docs: Scans the given ZIP file and executes the given action for each entry.
  <p>
  Only the meta-data without the actual data is read. If you want to stop the loop
  then throw a ZipBreakException.
  
  @param zip
  input ZIP file.
  @param action
  action to be called for each entry.
  
  @see ZipInfoCallback
  @see #iterate(File, ZipEntryCallback)