Files.walk的基本使用
Java NIO中提供了Files.walk方法用于遍历文件树。Files.walk能非常方便地遍历一个文件夹下的所有文件和子文件夹。 Files.walk方法使用示例:
Path startingDir = Paths.get("/home/user/docs");
Files.walk(startingDir)
.forEach(path -> {
System.out.println(path);
});
这个示例遍历startingDir文件夹下的所有文件和子文件夹,并打印出每个文件的路径。 Files.walk返回一个Stream,所以我们可以通过forEach对每个文件路径进行处理。更复杂的操作可以通过filter、map等Stream方法实现。 Files.walk需要注意的几点:
- 它默认是深度优先遍历,可以通过maxDepth参数控制遍历深度。
- 可以通过FileVisitOption配置项控制遍历行为,比如FOLLOW_LINKS跟踪 Symbolic Links。
- 需要处理可能出现的IOException。 通过Files.walk可以便利实现遍历大量文件,查找文件等操作。它隐藏了遍历的复杂性,让我们更容易处理文件树。
例子 获取指定文件夹下所有以MP4结尾的文件
// 指定要遍历的文件夹
String startFolder = "D:\\BaiduNetdiskDownload\\习题精讲";
List<String> result = null;
try (Stream<Path> paths = Files.walk(Paths.get(startFolder))) {
result = paths.filter(path -> !Files.isDirectory(path))
.filter(path -> path.toString().endsWith(".mp4"))
.map(Path::getFileName)
.map(Path::toString)
.collect(Collectors.toList());
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(result);
以上简单介绍了Files.walk的基本使用,它是Java NIO中非常有用的一个API。