编辑注意:请参阅下文,我要求文件在修改日期排序。
我已经在这个问题上打破了很长一段时间了:
我有一系列路径名,日志文件字符串。我想在达到日志文件的特定数量/大小时删除最旧的。
文件名的格式为:日期,该日期的第三个日志+ .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.