I am trying to read multiple files in a folder using DirectoryStream. There are 10 items altogether.
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
I wanted the file to be read in the order of their filename. Does DirectoryStream read the file in order of their filename? Because this is the result I get:
./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
This is my code:
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());
}
The javadoc of class DirectoryStream explicitly says:
So, if you need a specific order, it's up to you to sort the
Path
s. For example, for an alphabetical sorting you can do like this: