如何使用 Java 8 浏览所有子目录?
how to explore all sub directories with Java 8?
我想获取从当前目录开始的所有目录和子目录。
我找到了一种使用 flatMap()
实现此目的的方法。但它有一层深度:
List<File> files =
Stream.of(new File(".").listFiles())
.flatMap(file -> file.listFiles() == null ?
Stream.of(file) : Stream.of(file.listFiles()))
.collect(toList());
System.out.println("Count: " + files.size());
files.forEach(path -> System.out.println("Path: " + path));
如果我有下一个项目结构:
它只会显示:
Path: ./test/next1
如何使用 Java 1.8 full and deep 实现如下
Path: ./test/next1/next2/next3
使用Files.walk
:
List<Path> files = Files.walk(Paths.get(".")).collect(Collectors.toList());
System.out.println("Count: " + files.size());
files.forEach(System.out::println);
注意这个方案有一个问题:如果在遍历过程中遇到任何异常(例如,某个嵌套文件夹被拒绝访问),它会立即异常失败,并且没有简单的方法可以恢复行走。例如,检查 this question。如果在您的情况下不需要在异常后恢复,则此解决方案可以正常工作。
我想获取从当前目录开始的所有目录和子目录。
我找到了一种使用 flatMap()
实现此目的的方法。但它有一层深度:
List<File> files =
Stream.of(new File(".").listFiles())
.flatMap(file -> file.listFiles() == null ?
Stream.of(file) : Stream.of(file.listFiles()))
.collect(toList());
System.out.println("Count: " + files.size());
files.forEach(path -> System.out.println("Path: " + path));
如果我有下一个项目结构:
它只会显示:
Path: ./test/next1
如何使用 Java 1.8 full and deep 实现如下
Path: ./test/next1/next2/next3
使用Files.walk
:
List<Path> files = Files.walk(Paths.get(".")).collect(Collectors.toList());
System.out.println("Count: " + files.size());
files.forEach(System.out::println);
注意这个方案有一个问题:如果在遍历过程中遇到任何异常(例如,某个嵌套文件夹被拒绝访问),它会立即异常失败,并且没有简单的方法可以恢复行走。例如,检查 this question。如果在您的情况下不需要在异常后恢复,则此解决方案可以正常工作。