原文: https://howtodoinjava.com/java8/java-8-list-all-files-example/

学习将 Java 8 API 与Files.list()DirectoryStream一起使用,以递归方式列出目录中存在的所有文件,包括隐藏文件。

1. 使用Files.list()列出所有文件和子目录

Files.list()方法列出当前目录中的所有文件名和子目录

  1. Files.list(Paths.get("."))
  2. .forEach(System.out::println);
  3. Output:
  4. .\filename1.txt
  5. .\directory1
  6. .\filename2.txt
  7. .\Employee.java

2. 使用过滤器表达式仅列出目录内的文件

您可以使用过滤器过滤出子目录,并在需要时仅打印文件名

  1. Files.list(Paths.get("."))
  2. .filter(Files::isRegularFile)
  3. .forEach(System.out::println);
  4. Output:
  5. .\filename1.txt
  6. .\filename2.txt
  7. .\Employee.java

要列出其他目录中的文件,我们可以将"."替换为所需目录的完整路径。

3. 使用Files.newDirectoryStream()列出文件和子目录

Java 提供了一种更灵活的使用Files.newDirectoryStream()遍历目录内容的方式。

请注意,如果我们使用的是大型目录,则使用DirectoryStream实际上可以使代码更快。

  1. Files.newDirectoryStream(Paths.get("."))
  2. .forEach(System.out::println);
  3. Output:
  4. .\filename1.txt
  5. .\directory1
  6. .\filename2.txt
  7. .\Employee.java

4. 使用Files.newDirectoryStream()仅列出文件

要仅列出文件并从流中排除所有目录,请使用路径过滤器作为第二个参数。

  1. Files.newDirectoryStream(Paths.get("."), path -> path.toFile().isFile())
  2. .forEach(System.out::println);
  3. Output:
  4. .\filename1.txt
  5. .\filename2.txt
  6. .\Employee.java

5. 使用Files.newDirectoryStream()列出一定范围的文件

您可以更改在第二个参数中传递的路径过滤器表达式,以仅获取具有特定扩展名的文件。

  1. Files.newDirectoryStream(Paths.get("."),
  2. path -> path.toString().endsWith(".java"))
  3. .forEach(System.out::println);
  4. Output:
  5. .\Employee.java

6. 在目录中查找所有隐藏文件

要查找所有隐藏文件,可以在上述任何示例中使用过滤器表达式file -> file.isHidden()

或者,您可以使用此快捷方式。

  1. final File[] files = new File(".").listFiles(file -> file.isHidden());
  2. //or
  3. final File[] files = new File(".").listFiles(File::isHidden);

在以上示例中,我们学习了使用 Java 8 API 列表或根据各种搜索条件递归地迭代目录中的文件。 随意修改代码并使用它。

学习愉快!

参考文献:

DirectoryStream

Files.list()方法