企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# Java `Files.walk`教程 原文:http://zetcode.com/java/fileswalk/ Java `Files.walk`教程显示了如何使用`Files.walk`在 Java 中遍历文件。 `Files.walk`通过递归遍历以给定起始文件为根的文件树来返回由`Path`延迟填充的流。 文件树是深度优先遍历的。 有两种重载的`Files.walk`方法; 其中之一采用`maxDepth`参数,该参数设置要访问的最大目录级别数。 默认情况下,此方法不会自动跟随符号链接。 如果`options`参数包含`FOLLOW_LINKS`选项,则遵循符号链接。 ## `Files.walk`常规文件 第一个示例显示指定目录中的常规文件。 `FilesWalkRegularFilesEx.java` ```java package com.zetcode; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.stream.Stream; public class FilesWalkRegularFilesEx { public static void main(String[] args) throws IOException { var dirName = "C:/Users/Jano/Downloads"; try (Stream<Path> paths = Files.walk(Paths.get(dirName), 2)) { paths.filter(Files::isRegularFile) .forEach(System.out::println); } } } ``` 该程序将目录遍历两个级别。 我们应用带有`Files.isRegular()`谓词的过滤器。 ## `Files.walk`目录 以下示例显示指定目录中的目录。 `FilesWalkDirectoriesEx.java` ```java package com.zetcode; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.stream.Stream; public class FilesWalkDirectoriesEx { public static void main(String[] args) throws IOException { var dirName = "C:/Users/Jano/Downloads"; try (Stream<Path> paths = Files.walk(Paths.get(dirName))) { paths.filter(Files::isDirectory) .forEach(System.out::println); } } } ``` 要输出目录,我们应用`Files.isDirectory()`谓词。 这次没有递归遍历的限制。 ## `Files.walk`按文件扩展名 下一个程序列出了指定目录和其子目录中两个级别的所有 PDF 文件。 `FilesWalkFileExtensionEx.java` ```java package com.zetcode; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.stream.Stream; public class FilesWalkFileExtensionEx { public static void main(String[] args) throws IOException { var dirName = "C:/Users/Jano/Downloads"; try (Stream<Path> paths = Files.walk(Paths.get(dirName), 2)) { paths.map(path -> path.toString()).filter(f -> f.endsWith(".pdf")) .forEach(System.out::println); } } } ``` 该程序将在`Downloads`目录中列出 PDF 文件。 路径对象被转换为字符串,我们在字符串上调用`endsWith()`以检查其是否以`pdf`扩展名结尾。 在本教程中,我们使用`Files.walk`遍历目录内容。 您可能也对相关教程感兴趣: [Java `Files.list`教程](/java/fileslist/), [Java `Files.walk`教程](/java/fileswalk/), [Java `DirectoryStream`教程](/java/directorystream/), [Java 文件教程](/java/file/) , [Java 创建目录](/java/createdirectory/),[用 Java 复制文件](/java/copyfile/), [Java `ProcessBuilder`教程](/java/processbuilder/),[用 Java 创建文件](/java/createfile/)和 [Java 教程](/lang/java/)。