我有一个文件夹,我保存日志文件,我有一个工作计划每天运行删除旧日志。
删除旧日志文件的好方法是什么?
目前,我遍历目录以读取文件
File[] listOfFiles = srcFolder.listFiles(fileNameFilter); // this makes an array of files which match a filter I created
for(int i=listOfFiles.length-1; i>0; i--){ // leave at least one file
// listOfFiles[i].lastModified() - in last ten days?
if( what condition ?){
try {
listOfFiles[i].delete();
} catch(Exception e){
}
}
}
我在想
if(listOfFiles[i].lastModified() < tenDaysAgoMS) // where tenDaysAgoMS is the milliseconds ten days ago, but how to implement?
答案 0 :(得分:2)
if( (System.currentTimeMillis() - listOfFiles[i].lastModified()) > 10 * 24 * 60 * 60 * 1000){
}
答案 1 :(得分:2)
首先,您必须将最后修改的属性减去当前时间。
请参阅Calendar.getTimeInMillis()
和File.lastModified()
。
然后,您可以将天数乘以1000 * 60 * 60 * 24
来将天数转换为毫秒。
1000ms
= 1s
60s
= 1m
60m
= 1h
24h
= 1d
long now = Calendar.getInstance().getTimeInMillis();
long oneDay = 1000L * 60L * 60L * 24L;
long tenDays = 10L * oneDay;
File log = listOfFiles[i];
long diff = now - log.lastModified();
if (diff > tenDays) {
log.delete();
}
答案 2 :(得分:1)
使用您可以使用的工具。它比玩毫秒和类似的事情要清楚得多。我用Java Calendar
给出答案,因为我知道你不应该像Joda Time那样需要任何外部库,因为任务非常简单。如果您使用的是Java 8,请使用java.time
API。
Calendar tenDaysAgo = Calendar.getInstance();
tenDaysAgo.add(Calendar.DAY_OF_MONTH, -10); // yeah, Calendar is really not a good API.
File[] listOfFiles = srcFolder.listFiles(fileNameFilter);
for(int i = listOfFiles.length - 1; i > 0; i--){ // leave at least one file
File file = listOfFiles[i];
Calendar fileDate = Calendar.getInstance();
fileDate.setTime(new Date(file.lastModified()));
if (fileDate.before(tenDaysAgo)) {
try {
file.delete();
} catch (IOException e) {
// handle the error
}
}
}
答案 3 :(得分:1)
您的要求有多具体?其他答案足够大约十天。但是如果你的意思更精确,比如今天前十天,那么你需要使用Joda-Time库或Java 8中内置的新java.time包(受Joda-Time启发)。
通过致电withTimeAtStartOfDay
获取当天的第一时刻。这通常是00:00:00.000
,但并非总是如此。
时区有多重要。如果省略,则获取JVM的当前默认时区。通常更好地指定所需的时区。也许你想要UTC的一致性。
Joda-Time 2.5中的示例代码。
DateTimeZone zone = DateTimeZone.forID( "America/Montreal" ); // or DateTimeZone.UTC
DateTime now = DateTime.now( zone );
DateTime then = now.minusDays( 10 ).withTimeAtStartOfDay();
long millisSinceEpoch = then.getMillis(); // If needed to compare to files.