有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java DirectoryStream返回路径的顺序是什么?文件名,上次修改,文件大小?

我正在尝试使用DirectoryStream读取文件夹中的多个文件。一共有10项

doc_01.txt, doc_02.txt, doc_03.txt, doc_04.txt, doc_05.txt, doc_06.txt, doc_07.txt, doc_08.txt, doc_09.txt, doc_10.txt

我想按照文件名的顺序读取文件。 DirectoryStream是否按照文件名的顺序读取文件?因为这是我得到的结果:

./mydata/doc_01.txt, ./mydata/doc_02.txt, ./mydata/doc_03.txt, ./mydata/doc_04.txt, ./mydata/doc_08.txt, ./mydata/doc_07.txt, ./mydata/doc_09.txt, ./mydata/doc_10.txt, ./mydata/doc_05.txt, ./mydata/doc_06.txt

这是我的代码:

public static void readData(){
    Instant start = Instant.now();
    System.out.println("Start reading");

    Path path = Paths.get(String.join(File.separator, ".", "mydata"));

    try(DirectoryStream<Path> stream = 
            Files.newDirectoryStream(path, "*.txt")
    ){
        for(Path entry : stream){
            System.out.println("reading: " +entry.toString());
        }
    }catch(IOException e){
        System.err.println("Error: " + e.getMessage());
        e.printStackTrace();
    }
    Instant end = Instant.now();
    System.out.println("Done in " + Duration.between(start, end).toString());
}

共 (1) 个答案

  1. # 1 楼答案

    DirectoryStream的javadoc 明确地说:

    The elements returned by the iterator are in no specific order. Some file systems maintain special links to the directory itself and the directory's parent directory. Entries representing these links are not returned by the iterator.

    因此,如果您需要特定的顺序,则由您对Path进行排序。 例如,对于字母排序,您可以这样做:

    DirectoryStream<Path> directoryStream = ...;
    StreamSupport.stream(directoryStream.spliterator(), false)
        .sorted(Comparator.comparing(Path::toString))
        .forEach(p -> { System.out.println("reading: " + p); });