原文:http://zetcode.com/java/fileswalk/

Java Files.walk教程显示了如何使用Files.walk在 Java 中遍历文件。

Files.walk通过递归遍历以给定起始文件为根的文件树来返回由Path延迟填充的流。 文件树是深度优先遍历的。 有两种重载的Files.walk方法; 其中之一采用maxDepth参数,该参数设置要访问的最大目录级别数。

默认情况下,此方法不会自动跟随符号链接。 如果options参数包含FOLLOW_LINKS选项,则遵循符号链接。

Files.walk常规文件

第一个示例显示指定目录中的常规文件。

FilesWalkRegularFilesEx.java

  1. package com.zetcode;
  2. import java.io.IOException;
  3. import java.nio.file.Files;
  4. import java.nio.file.Path;
  5. import java.nio.file.Paths;
  6. import java.util.stream.Stream;
  7. public class FilesWalkRegularFilesEx {
  8. public static void main(String[] args) throws IOException {
  9. var dirName = "C:/Users/Jano/Downloads";
  10. try (Stream<Path> paths = Files.walk(Paths.get(dirName), 2)) {
  11. paths.filter(Files::isRegularFile)
  12. .forEach(System.out::println);
  13. }
  14. }
  15. }

该程序将目录遍历两个级别。 我们应用带有Files.isRegular()谓词的过滤器。

Files.walk目录

以下示例显示指定目录中的目录。

FilesWalkDirectoriesEx.java

  1. package com.zetcode;
  2. import java.io.IOException;
  3. import java.nio.file.Files;
  4. import java.nio.file.Path;
  5. import java.nio.file.Paths;
  6. import java.util.stream.Stream;
  7. public class FilesWalkDirectoriesEx {
  8. public static void main(String[] args) throws IOException {
  9. var dirName = "C:/Users/Jano/Downloads";
  10. try (Stream<Path> paths = Files.walk(Paths.get(dirName))) {
  11. paths.filter(Files::isDirectory)
  12. .forEach(System.out::println);
  13. }
  14. }
  15. }

要输出目录,我们应用Files.isDirectory()谓词。 这次没有递归遍历的限制。

Files.walk按文件扩展名

下一个程序列出了指定目录和其子目录中两个级别的所有 PDF 文件。

FilesWalkFileExtensionEx.java

  1. package com.zetcode;
  2. import java.io.IOException;
  3. import java.nio.file.Files;
  4. import java.nio.file.Path;
  5. import java.nio.file.Paths;
  6. import java.util.stream.Stream;
  7. public class FilesWalkFileExtensionEx {
  8. public static void main(String[] args) throws IOException {
  9. var dirName = "C:/Users/Jano/Downloads";
  10. try (Stream<Path> paths = Files.walk(Paths.get(dirName), 2)) {
  11. paths.map(path -> path.toString()).filter(f -> f.endsWith(".pdf"))
  12. .forEach(System.out::println);
  13. }
  14. }
  15. }

该程序将在Downloads目录中列出 PDF 文件。 路径对象被转换为字符串,我们在字符串上调用endsWith()以检查其是否以pdf扩展名结尾。

在本教程中,我们使用Files.walk遍历目录内容。 您可能也对相关教程感兴趣: Java Files.list教程Java Files.walk教程Java DirectoryStream教程Java 文件教程Java 创建目录用 Java 复制文件Java ProcessBuilder教程用 Java 创建文件Java 教程