Java Files.walk 教程显示了如何使用Files.walk
在 Java 中遍历文件。
Files.walk
通过递归遍历以给定起始文件为根的文件树来返回由Path
延迟填充的流。 文件树是深度优先遍历的。 有两种重载的Files.walk
方法; 其中之一采用maxDepth
参数,该参数设置要访问的最大目录级别数。
默认情况下,此方法不会自动跟随符号链接。 如果options
参数包含FOLLOW_LINKS
选项,则遵循符号链接。
Files.walk
常规文件
第一个示例显示指定目录中的常规文件。
FilesWalkRegularFilesEx.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
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
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
遍历目录内容。