Java listFiles()默认读取目录下的文件是按照什么顺序的?

问题描述 投票:0回答:4

我编写了以下程序,它读取目录中的所有文件。 所有文件名均由数字组成(例如 10023134.txt)。

File dir = new File(directoryPath);
File[] files = dir.listFiles();
for (File file : files)
    try {
        if ( !file.exists())
            continue;
        else if (file.isFile()) {
            // some process
        }
    } catch (Exception e) {}

我想知道默认情况下读取目录中的文件的顺序是怎样的。

程序似乎既不按数字顺序也不按创建日期顺序读取文件。

java java-io
4个回答
6
投票

JavaDoc中所指定:

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

如果你想对它们进行排序,你必须自己对它们进行排序。

请注意,如果您使用默认顺序进行排序,您仍然会得到不同的结果,具体取决于您的操作系统。再次来自 JavaDoc

此方法定义的顺序取决于底层 系统。在 UNIX 系统上,字母大小写在比较时很重要 路径名;在 Microsoft Windows 系统上则不然。


5
投票

文件的顺序可能是操作系统默认(或列出中性)顺序,并且取决于操作系统如何将文件列表返回给 Java。

不保证文件返回的顺序。

阅读完列表后,您可以使用

Arrays.sort(T[] Comparator<? super T> c)
对列表进行排序。


3
投票

文件按照操作系统的自然顺序排序。这可能是创作顺序。 如果您想对列表进行排序,可以致电

File[] files = Arrays.sort(dir.listFiles())

对于其他排序顺序,请随意使用您自己的

Comparator
。 问候。


0
投票

顺序实际上取决于文件系统。我们以 Java 8 和 Linux 为例。

listFiles()
的实现实际上在内部调用了本机方法
java.io.FileSystem#list
。查看
jdk\src\solaris\native\java\io\UnixFileSystem_md.c
的实现,我们发现它调用了 POSIX
readdir64_r
,它是
readdir
的变体。从https://utcc.utoronto.ca/%7Ecks/space/blog/unix/ReaddirOrder,我们可以知道顺序实际上是底层文件系统的
traversal order

© www.soinside.com 2019 - 2024. All rights reserved.