在Files.walkFileTree遍历顺序(Order of traversal in File

2019-07-29 05:32发布

什么是该命令Files.walkFileTree访问文件/目录处于同一水平?

它不会出现看望他们按大小顺序,最后修改时间或名称。 我找不到任何东西的API文档,无论是。

也许preVisitDirectory可以使用的方法来访问指定的顺序,但什么是默认的行为?

Answer 1:

在其中读出子目录没有被定义为每在此评论的顺序Java教程 :

文件树是第一次走进深度,但你不能对迭代顺序的子目录被访问的​​任何假设。

至于在这些文件的读取次序,这取决于(当前实现)所提供的DirectoryStream ,这是sun.nio.fs.WindowsDirectoryStream我的电脑上。 阅读的javadoc的DirectoryStream ,你会看到:

迭代器返回的元素没有特定的顺序。



Answer 2:

Java可以稍后为您挑选吧,这里是我做的。

public static void printy(Path rootDirPath) {
        //treesets to hold paths alphabetically
        TreeSet<Path> paths = new TreeSet<>();
        try {
            Files.walkFileTree(rootDirPath, new SimpleFileVisitor<Path>() {
                @Override
                public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
                    paths.add(dir);
                    return super.preVisitDirectory(rootDirPath, attrs);
                }
                @Override
                public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
                    paths.add(file);
                    return super.visitFile(rootDirPath, attrs);
                }
                @Override
                public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException {
                    return super.visitFileFailed(file, exc);
                }
                @Override
                public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
                    return super.postVisitDirectory(rootDirPath, exc);
                }
            });
        //I'm printing the contents alphabetically,.. your impl might vary
        paths.forEach(System.out::println);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

希望这可以帮助



文章来源: Order of traversal in Files.walkFileTree