簡體   English   中英

Files.walkFileTree中的遍歷順序

[英]Order of traversal in Files.walkFileTree

Files.walkFileTree訪問同一級別的文件/目錄的順序是什么?

它似乎沒有按大小,上次修改時間或名稱的順序訪問它們。 我在API文檔中也找不到任何內容。

也許preVisitDirectory方法可用於指定訪問順序但默認行為是什么?

讀取子目錄的順序未按照Java教程此注釋定義:

首先深度遍歷文件樹,但是您不能對訪問子目錄的迭代順序做出任何假設。

至於文件的讀取順序,它取決於(在當前實現中)提供的DirectoryStream ,即我的計算機上的sun.nio.fs.WindowsDirectoryStream 閱讀DirectoryStream的javadoc ,您將看到:

迭代器返回的元素沒有特定的順序。

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();
        }
    }

希望這可以幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM