udo*_*don 1 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());
}
Run Code Online (Sandbox Code Playgroud)
DirectoryStream类的 javadoc 明确表示:
迭代器返回的元素没有特定的顺序。一些文件系统维护到目录本身和目录的父目录的特殊链接。迭代器不返回表示这些链接的条目。
因此,如果您需要特定的顺序,则由您对Paths进行排序。例如,对于字母排序,您可以这样做:
DirectoryStream<Path> directoryStream = ...;
StreamSupport.stream(directoryStream.spliterator(), false)
.sorted(Comparator.comparing(Path::toString))
.forEach(p -> { System.out.println("reading: " + p); });
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3309 次 |
| 最近记录: |