code: public boolean walk(OutputHandler outputHandler) throws IOException {
  		try (ZipFile zipFile = new ZipFile(zip)) {
  			// walk all entries and look for matches
  			Enumeration<? extends ZipEntry> entries = zipFile.entries();
  			while(entries.hasMoreElements()) {
  				ZipEntry entry = entries.nextElement();
  
  				// first check if the file matches the name, if a name-pattern is given
  				File file = new File(zip, entry.getName());
  				if(outputHandler.found(file, zipFile.getInputStream(entry))) {
  					return true;
  				}
  
  				// look for name or content inside zip-files as well, do it recursively to also
  				// look at content of nested zip-files
  				if(ZipUtils.isZip(entry.getName())) {
  					if(walkRecursive(file, zipFile.getInputStream(entry), outputHandler)) {
  						return true;
  					}
  				}
  			}
  
  			return false;
  		}
  	}
docs: Run the ZipFileWalker using the given OutputHandler
  
  @param outputHandler For every file that is found in the
  Zip-file, the method found() in the {@link OutputHandler}
  is invoked.
  
  @return true if processing was stopped because of a found file,
  false if no file was found or the {@link OutputHandler} did
  not return true on the call to found().
  
  @throws IOException Thrown if an error occurs while handling the
  Zip-file or while handling the call to found().