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

Java DirectoryStream返回路径的顺序是什么?文件名,上次修改,文件大小?,java,directorystream,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、/my

我正在尝试使用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());
}
publicstaticvoidreaddata(){
即时开始=即时。现在();
System.out.println(“开始读取”);
Path Path=Path.get(String.join(File.separator,“.”,“mydata”);
try(DirectoryStream=
Files.newDirectoryStream(路径“*.txt”)
){
for(路径条目:流){
System.out.println(“读取:“+entry.toString());
}
}捕获(IOE异常){
System.err.println(“错误:+e.getMessage());
e、 printStackTrace();
}
瞬间结束=瞬间。现在();
System.out.println(“完成时间”+持续时间.between(开始、结束).toString());
}
类的javadoc 明确表示:

迭代器返回的元素没有特定的顺序。 有些文件系统维护到目录本身的特殊链接 和目录的父目录。表示这些链接的条目 迭代器不会返回

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

DirectoryStream<Path> directoryStream = ...;
StreamSupport.stream(directoryStream.spliterator(), false)
    .sorted(Comparator.comparing(Path::toString))
    .forEach(p -> { System.out.println("reading: " + p); });
DirectoryStream DirectoryStream=。。。;
StreamSupport.stream(directoryStream.spliterator(),false)
.sorted(Comparator.comparing(路径::toString))
.forEach(p->{System.out.println(“读取:“+p”);});
类的javadoc 明确表示:

迭代器返回的元素没有特定的顺序。 有些文件系统维护到目录本身的特殊链接 和目录的父目录。表示这些链接的条目 迭代器不会返回

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

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

我想我没有彻底阅读API。但这就解释了这一点。非常感谢。:)我想这个问题现在可以结束了。我想我没有彻底阅读API。但这就解释了这一点。非常感谢。:)我想这个问题现在可以结束了。