如何使用 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。如果在您的情况下不需要在异常后恢复,则此解决方案可以正常工作。