DirectoryStream以什么样的顺序返回路径?文件名,最后修改,filesize?

时间:2017-04-30 11:41:26

标签: 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 个答案:

答案 0 :(得分:3)

班级DirectoryStream的javadoc 明确地说:

  

迭代器返回的元素是,没有特定的顺序。   某些文件系统保持与目录本身的特殊链接   和目录的父目录。表示这些链接的条目   迭代器不会返回。

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

DirectoryStream<Path> stream = ...;
List<Path> list = new ArrayList<>();
stream.forEach(list::add);
list.sort(Comparator.comparing(Path::toString));
for (Path entry: list) {
  System.out.println("reading: " +entry);
}