【问题标题】:Listing files in the order in which they were created in folder [duplicate]按在文件夹中创建的顺序列出文件[重复]
【发布时间】:2012-11-07 21:18:37
【问题描述】:

可能重复:
How do I find the last modified file in a directory in Java?

我正在尝试按照创建顺序从目录中检索文件。这已成为使用 Java 的问题。 File 类中的 listFiles() 方法不保证返回文件的顺序。有没有其他方法可以按照文件在目录中的创建顺序来检索文件?

【问题讨论】:

  • OP 正在寻找创建时间,而不是修改时间。请参阅下面的答案

标签: java file io


【解决方案1】:

您需要在File.lastModified 的基础上使用Comparator 对File.listFiles() 返回的array of files 进行排序

【讨论】:

  • 快点打败我吧!仅当文件自创建以来未修改时才有效,当然...
  • 我已经这样做了,当文件被 ftp'​​d 到这个文件夹时,最后修改日期是创建日期的可靠来源吗?
  • 什么是ftp'd?你试过使用它吗?它给你正确的结果吗?
  • 我的程序监控一个文件夹,需要按照先进先出的顺序处理文件。文件通过文件传输协议 (FTP) 传输到该文件夹​​
  • @ReidMac。在这种情况下,您必须使用creation time。修改时间不适用于新创建的文件。
【解决方案2】:

不,它没有,但Arrays.sort 方法确实需要Comparator。我在下面为您定义了一个简单的方法,然后将您自己淘汰:

new Comparator<File>() {
public int compare(File m1, File  m2) {
    return m1.lastModified().compare(m2.lastModified());
}
});

希望这会有所帮助...

【讨论】:

    【解决方案3】:

    您已经知道listFiles 不保证和订购。如this question 中所述,您可以获取其属性以查找创建时间并使用thia 之类的内容对其进行排序。

    【讨论】:

      【解决方案4】:

      创建一个未排序的Set&lt;File&gt;,在其中添加所有Files (unsorted.addAll(dir.listFiles()) 然后,使用Set&lt;File&gt; sorted=new TreeSet(Comparator&lt;File&gt; byDate) 创建一个新的TreeSet,并使用自定义比较器比较日期。

      Comparator<File> byDate=new Comparator<File>() {
      
          @Override
          public int compare(File o1, File o2) {
              return new Date(o1.lastModified()).compareTo(new Date(o2.lastModified()));
          }
      };
      

      然后做:

      sorted.addAll(unsorted);
      

      新的 套装将按日期排序。

      【讨论】:

        【解决方案5】:

        如果您查看File 的Java API,就会发现有一个名为lastModified 的方法。如果您按该属性对文件进行排序,您应该得到您想要的。我很确定在创建文件后无法安排文件,因为每个实现都是特定于操作系统的。

        所以如果你像这样做了一个比较器:

        public class FileComparator implements Comparator<File> {
          public int compare(File x, File y) {
            Long.compare(x.lastModified(), y.lastModified());
          }
        }
        

        可以这样使用:

        File file = new File("...");
        List<File> files = Arrays.asList(file.listFiles());
        Collections.sort(files, new FileComparator());
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-08-23
          • 2013-04-29
          • 2020-03-03
          • 2015-02-19
          • 2013-07-21
          • 2018-12-10
          • 1970-01-01
          • 2010-11-08
          相关资源
          最近更新 更多