private static void traverseRecursivelyIO(final File fromFile, @NotNull FileFilter dirFilter, @NotNull FileFilter fileFilter, @NotNull FSOperations.FileConsumer processor) throws IOException {
    final File[] children = fromFile.listFiles();
    if (children != null) { // is a directory
      if (children.length > 0 && dirFilter.accept(fromFile)) {
        for (File child : children) {
          traverseRecursivelyIO(child, dirFilter, fileFilter, processor);
        }
      }
    }
    else { // is a file
      if (fileFilter.accept(fromFile)) {
        processor.consume(fromFile, null);
      }
    }
  }
private static void traverseRecursivelyIO(final File fromFile, @NotNull FileFilter dirFilter, @NotNull FileFilter fileFilter, @NotNull FSOperations.FileConsumer processor)