【问题标题】:In which order are the files in a directory read in by default by Java listFiles()?Java listFiles() 默认读取的目录中的文件是按什么顺序排列的?
【发布时间】:2014-06-30 06:49:08
【问题描述】:

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


【解决方案1】:

JavaDoc中指定:

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

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

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

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

【讨论】:

    【解决方案2】:

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

    无法保证返回文件的顺序。

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

    【讨论】:

    • 虽然对于该方法的大多数实现来说这可能是正确的,但文档中没有任何内容可以保证这种行为
    • @SillyFreak 这是真的,这在文档中也没有什么可以说的,除此之外,订单不能保证
    【解决方案3】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-27
      • 1970-01-01
      • 2012-12-15
      • 1970-01-01
      • 2012-08-27
      • 2021-08-06
      • 1970-01-01
      相关资源
      最近更新 更多