我正在使用Java读取多个文本文件并打印其目录,我想知道为什么输出不是按字母顺序排列的?
代码段(也可从互联网上获取)
File dir = new File("/home/dilapitan/Desktop/xml-parsing/files/");
File[] listOfFiles = dir.listFiles();
for (File path : listOfFiles) {
System.out.println(path);
}
输出:
dilapitan@NT071855:~/Desktop/xml-parsing$ java Multiple
/home/dilapitan/Desktop/xml-parsing/files/c.txt
/home/dilapitan/Desktop/xml-parsing/files/b.txt
/home/dilapitan/Desktop/xml-parsing/files/a.txt
dilapitan@NT071855:~/Desktop/xml-parsing$
我可以使用输出:
a.txt
b.txt
c.txt
提前谢谢!
答案 0 :(得分:0)
引用File#listDir
's documentation:
无法保证结果数组中的名称字符串将以任何特定顺序出现;特别是,它们不会保证按字母顺序出现。
如果您想按特定顺序打印,则必须自行完成。 Java 8流为您提供了一种优雅的方法,即从补丁中提取文件名称并在单个语句中对它们进行排序:
Arrays.stream(listOfFiles)
.map(File::getName)
.sorted()
.forEach(System.out::println);
答案 1 :(得分:0)
只是另一种方法,但使用java8的力量
List<Path> x = Files.list(Paths.get("C:\\myPath\\Tools"))
.filter(p -> Files.exists(p))
.map(s -> s.getFileName())
.sorted()
.collect(Collectors.toList());
x.forEach(System.out::println);
甚至更好
List<Path> x = Files.list(Paths.get("C:\\Users\\myPath\\Tools"))
.filter(Files::exists)
.map(Path::getFileName)
.sorted()
.collect(Collectors.toList());
x.forEach(System.out::println);
答案 2 :(得分:0)
谢谢那些回答的人。我想到了一个非常简单的解决方案:
File dir = new File("/home/dilapitan/Desktop/xml-parsing/files/");
File[] listOfFiles = dir.listFiles();
Arrays.sort(listOfFiles);
for (File path : listOfFiles) {
System.out.println(path);
}
哈哈哈哈,我向大家道歉。