当前位置:  开发笔记 > 编程语言 > 正文

使用Java 8 Stream从root用户递归添加所有文件

如何解决《使用Java8Stream从root用户递归添加所有文件》经验,为你挑选了1个好方法。

我有以下递归方法,只是将给定文件夹中的所有子项添加到列表中:

private List readTemplateFiles(String nextTemplateDir, String rootTemplateDir) throws FileNotFoundException {
    List templateFiles = new ArrayList<>();

    for (File file : new File(nextTemplateDir).listFiles()) {
        if (!file.isDirectory() && !file.getName().startsWith(".")) {
            templateFiles.add(TemplateFile.create(file, rootTemplateDir));
        } else if (file.isDirectory()) {
            templateFiles.addAll(readTemplateFiles(file.getAbsolutePath(), rootTemplateDir));
        }
    }

    return templateFiles;
}

我怎么能使用新的Java 8 Stream API重构这个方法?



1> Tunaki..:

您可以使用Files.walk(start, options...)递归遍历文件树.此方法返回Stream包含Path从给定根开始的所有内容.

通过遍历以给定起始文件为根的文件树来返回Stream懒惰填充的内容Path.遍历深度优先的文件树,流中的元素Path是通过解析相对路径获得的对象start.

private List readTemplateFiles(String nextTemplateDir, String rootTemplateDir) throws FileNotFoundException {
    return Files.walk(Paths.get(nextTemplateDir))
                .filter(path -> !path.getFileName().startsWith("."))
                .map(path -> TemplateFile.create(path.toFile(), rootTemplateDir))
                .collect(Collectors.toList());
}

在这些选项中,有FOLLOW_LINKS符号链接.

推荐阅读
虎仔球妈_459
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有