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

时间:2014-06-30 06:49:08

标签: java java-io

我制作了以下程序,该程序读取目录中的所有文件。 所有文件名都由数字组成(例如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) {}

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

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

3 个答案:

答案 0 :(得分:6)

正如JavaDoc

中所述
  

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

如果你想要它们排序,你必须自己排序。

请注意,如果您使用默认排序进行排序,则根据您的操作系统,您仍会获得不同的结果。再次来自JavaDoc

  

此方法定义的排序取决于底层证券   系统。在UNIX系统上,字母大小写在比较中很重要   路径名;在Microsoft Windows系统上它不是。

答案 1 :(得分:5)

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

无法保证文件可能会被退回。

您可以在阅读后使用Arrays.sort(T[] Comparator<? super T> c)对列表进行排序。

答案 2 :(得分:3)

文件按操作系统的自然顺序排序。它可能是创建顺序。 如果要对列表进行排序,可以调用

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

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