如何按时间顺序对字符串数组(列表)进行排序,与内置排序函数不同?

时间:2016-10-19 20:16:48

标签: java arrays sorting

编辑注意:请参阅下文,我要求文件在修改日期排序。

我已经在这个问题上打破了很长一段时间了:

我有一系列路径名,日志文件字符串。我想在达到日志文件的特定数量/大小时删除最旧的。

文件名的格式为:日期,该日期的第三个日志+ .log

e.g。 "2016-10-19-#1.log", "2016-10-19-#2.log", "2016-10-19-#3.log"

当我使用Collections.sort(arrayList);排序时,条目"2016-10-19-#1.log", "2016-10-19-#2.log" and "2016-10-19-#10.log"将被分类为#1,#10和#2。而不是#1,#2和#10

我的目标是最终删除最旧的日志文件。

这是一段代码:

File directory = new File(pathToDir);
FilenameFilter fnf = new FilenameFilter() {

    @Override
    public boolean accept(File dir, String name) {
        return name.toLowerCase().endsWith(".log");
    }
};

int dirCount = directory.listFiles(fnf).length;
if (dirCount > maxLogCache) {
    for(File file2 : directory.listFiles(fnf)) {
        file2.delete();
        dirCount--;
            if (dirCount <= maxLogCache) {
            break;
        }
    }
}

如果文件#1到#11存在,这将删除#1,#10,#11,#2,#3 ...中的文件。

新编辑 对不起风格

不是使用文件名字符串对数组(列表)进行排序,而是需要从文件中获取lastModified日期。

File directory = new File(pathToDir);
FilenameFilter fnf = new FilenameFilter() {

    @Override
    public boolean accept(File dir, String name) {
        return name.toLowerCase().endsWith(".log");
    }
};    
int dirCount = directory.listFiles(fnf).length;
// Code for sorting based on lastModified.

0 个答案:

没有答案