code: boolean doFileNames(Stream<String> filenames) throws IOException {
          return doClassNames(
              filenames.filter(name -> name.endsWith(".class"))
                       .filter(name -> !name.endsWith("package-info.class"))
                       .filter(name -> !name.endsWith("module-info.class"))
                       .map(s -> s.replaceAll("\\.class$", ""))
                       .map(s -> s.replace(File.separatorChar, '.'))
                       .collect(toList()));
      }
docs: Processes a stream of filenames (strings). The strings are in the
  form pkg/pkg/pkg/classname.class relative to the root of a package
  hierarchy.
  
  @param filenames a Stream of filenames to process
  @return true for success, false for failure
  @throws IOException if an I/O error occurs