Java 8 如何使用Java8浏览所有子目录?

Java 8 如何使用Java8浏览所有子目录?,java-8,subdirectory,Java 8,Subdirectory,我想从当前目录开始获取所有目录和子目录 我找到了一种通过flatMap()实现这一点的方法。但它有一个层次: List<File> files = Stream.of(new File(".").listFiles()) .flatMap(file -> file.listFiles() == null ? Stream.of(file) : Stre

我想从当前目录开始获取所有目录和子目录

我找到了一种通过
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));
列出文件=
Stream.of(新文件(“.”.listFiles())
.flatMap(文件->文件.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”);
如果我有下一个项目结构:

它将显示:

路径:./test/next1

如何使用Java 1.8完整而深入地实现这一点,如下所示

路径:./test/next1/next2/next3

使用:

List files=files.walk(path.get(“.”).collect(Collectors.toList());
System.out.println(“Count:+files.size());
files.forEach(System.out::println);
请注意,此解决方案存在一个问题:如果在遍历过程中遇到任何异常(例如,对某个嵌套文件夹的访问被拒绝),它将立即因异常而失败,并且没有简单的恢复方法。检查,例如。如果在您的情况下不需要在异常后恢复,则此解决方案可以正常工作

List<Path> files = Files.walk(Paths.get(".")).collect(Collectors.toList());
System.out.println("Count: " + files.size());
files.forEach(System.out::println);