为了账号安全,请及时绑定邮箱和手机立即绑定

用Java列出文件的最佳方法,按修改的日期排序?

用Java列出文件的最佳方法,按修改的日期排序?

阿波罗的战车 2019-07-06 15:03:45
用Java列出文件的最佳方法,按修改的日期排序?我想在目录中得到一个文件列表,但是我想对它进行排序,使最老的文件是第一位的。我的解决方案是调用File.listFiles,然后使用基于File.lastModify的列表,但我想知道是否有更好的方法。编辑:按照建议,我目前的解决方案是使用匿名比较器:File[] files = directory.listFiles();Arrays.sort(files, new Comparator<File>(){     public int compare(File f1, File f2)     {         return Long.valueOf(f1.lastModified()).compareTo(f2.lastModified());     } });
查看完整描述

3 回答

?
慕运维8079593

TA贡献1876条经验 获得超5个赞

我认为你的解决方案是唯一明智的方法。获取文件列表的唯一方法是使用File.listFiles()文档指出,这不能保证返回的文件的顺序。因此,您需要编写一个比较器File.lastModified()和文件数组一起传递给Arrays.Sort().


查看完整回答
反对 回复 2019-07-06
?
守着星空守着你

TA贡献1799条经验 获得超8个赞

如果您有许多文件,这可能会更快。这使用装饰-排序-取消装饰模式,以便每个文件的最后修改日期仅被获取。一次而不是每次排序算法比较两个文件。这可能会减少从O(N Logn)到O(N)的I/O调用数。

但是,这是更多的代码,所以只有当您主要关注速度时,才应该使用它,并且它在实践中要快得多(我还没有检查过)。

class Pair implements Comparable {
    public long t;
    public File f;

    public Pair(File file) {
        f = file;
        t = file.lastModified();
    }

    public int compareTo(Object o) {
        long u = ((Pair) o).t;
        return t < u ? -1 : t == u ? 0 : 1;
    }};// Obtain the array of (file, timestamp) pairs.File[] files = directory.listFiles();Pair[] pairs = new Pair[files.length];
    for (int i = 0; i < files.length; i++)
    pairs[i] = new Pair(files[i]);// Sort them by timestamp.Arrays.sort(pairs);// Take the sorted pairs and extract only the file part,
     discarding the timestamp.for (int i = 0; i < files.length; i++)
    files[i] = pairs[i].f;


查看完整回答
反对 回复 2019-07-06
  • 3 回答
  • 0 关注
  • 1256 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信