Java中如何列出目录中的文件?

3
我是一名有用的助手,可以为您进行文本翻译。以下是需要翻译的内容:

我有一个目录,需要读取其中的txt文件。

这是代码:

            try {
                File dir = new File(directoryName);
                File[] files = dir.listFiles(new FilenameFilter() {
                    @Override
                    public boolean accept(File dir, String name) {
                        return name.endsWith(".txt");
                    }
                });
                for (File xmlfile : files) {
System.out.println("File name:" + xmlfile.getAbsolutePath());
                }
            } catch (Exception e) {
                System.out.println(e);
            }  

创建了一个测试用例如下:
1. 创建了一个名为“content”的目录。里面放入了两个文件:1.txt和2.txt,按照被提及的顺序进行创建。
2. 其中一个文件,1.txt被重命名为sriram.txt。

以下是我得到的结果:
1. 在Windows上,文件总是按字母顺序列出。
2. 在Linux上,文件会按时间戳进行排序。在Ubuntu上,文件会按照时间戳的相反顺序列出。在其他基于Debian的发行版上,文件会按时间戳的升序排列。

我的问题如下:
1. Java内部是如何列出文件的?关于listFilesFilenameFilter的文档并不清楚。
2. 从上述测试用例看来,似乎Java在列出文件时有一些与操作系统相关的内容。这是什么内容?我如何显示它?


4
如果文档中没有说明,就意味着无法保证订单。 - biziclop
如果您想要特定的顺序,您将需要自己对文件进行排序。 - mike
2个回答

7

文档对此非常清楚:

不能保证结果数组中的名称字符串以任何特定顺序出现; 特别是,它们不保证按字母顺序出现。

(在大多数情况下,当您需要文件名按照给定的顺序出现时,通常还需要实现其他排序方式,因此您并没有失去太多必要手动对列表进行排序。)


谢谢。但是我已经运行了相同的测试多次(至少在Windows上运行了500次,可能在Linux上运行了50次)。顺序总是相同的(如前所述)。是否有某些特定于操作系统的东西会强制文件按特定顺序返回,一次又一次地? - Sriram
1
@Sriram 实际上,Java 只是向操作系统请求文件列表。无论操作系统以什么顺序返回它们,都将被保留。大多数文件系统可能会始终以相同的顺序返回相同的目录,但并不能保证所有文件系统都这样做。也不能保证操作系统不会重新排列它们。而且不能保证所有操作系统都以相同的顺序返回它们。所以基本上:即使你测试过,也不要依赖任何顺序。 - biziclop

0

在任何系统中,您都不能依赖于任何顺序。如果您需要按顺序排列它们,您需要对它们进行排序。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接