扫描多个文件并按字母顺序打印

时间:2017-07-04 08:14:12

标签: java file

我正在使用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

提前谢谢!

3 个答案:

答案 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);
}
哈哈哈哈,我向大家道歉。