Порядок обхода в Files.walkFileTree

В каком порядке Files.walkFileTree посещает файлы /каталоги на том же уровне?

Похоже, что они не посещают их в порядке размера, времени последнего изменения или имени. Я не смог найти ничего в Документация по API .

Возможно, метод preVisitDirectory можно использовать для указания порядка посещения, но каково поведение по умолчанию?

11 голосов | спросил Sridhar 1 Maypm12 2012, 14:47:54

2 ответа


0

Порядок чтения подкаталогов не определен в соответствии с этим комментарием в Учебник по Java :

  

Дерево файлов сначала просматривается на глубину, но вы не можете делать какие-либо предположения о порядке итерации посещаемых подкаталогов.

Что касается порядка чтения файлов, то он зависит (в текущей реализации) от предоставленного DirectoryStream, который sun.nio.fs.WindowsDirectoryStream на моем компьютере. Чтение Javadoc из DirectoryStream , вы увидите, что:

  

Элементы, возвращаемые итератором, не имеют определенного порядка.

ответил assylias 1 Maypm12 2012, 14:54:33
0

Ява может отсортировать это для вас позже, вот что я сделал.

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

Надеюсь, это поможет

ответил Anand Rockzz 23 MaramFri, 23 Mar 2018 09:14:50 +03002018-03-23T09:14:50+03:0009 2018, 09:14:50

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132