是否有使用Java获取目录中最旧文件的方法? 我有一个目录,我将日志文件写入其中,并且在我记录了500多个日志文件后想删除日志文件(但只想删除最旧的日志文件)。
我能想到的唯一方法是:
此逻辑的不便之处在于,每次我想获取最旧的文件时,我都必须循环日志目录,这似乎并不是最有效的。
我希望java.io.File库将提供一种方法来获取目录中最旧的文件,但是它似乎不存在,或者我没有找到它。如果有一种方法可以在目录中获取最旧的文件,或者在对解决方案进行编程时使用更便捷的方法,我很想知道。
谢谢
答案 0 :(得分:0)
不幸的是,您将只需要遍历文件系统。像这样:
public static void main(String[] args) throws IOException {
String parentFolder = "/var/log";
int numberOfOldestFilesToFind = 5;
List<Path> oldestFiles = findOldestFiles(parentFolder, numberOfOldestFilesToFind);
System.out.println(oldestFiles);
}
private static List<Path> findOldestFiles(String parentFolder, int numberOfOldestFilesToFind) throws IOException {
Comparator<? super Path> lastModifiedComparator =
(p1, p2) -> Long.compare(p1.toFile().lastModified(),
p2.toFile().lastModified());
List<Path> oldestFiles = Collections.emptyList();
try (Stream<Path> paths = Files.walk(Paths.get(parentFolder))) {
oldestFiles = paths.filter(Files::isRegularFile)
.sorted(lastModifiedComparator)
.limit(numberOfOldestFilesToFind)
.collect(Collectors.toList());
}
return oldestFiles;
}
答案 1 :(得分:0)
基于@Yoda的评论,我认为我会回答自己的问题。
public static void main(String[] args) throws IOException {
String directory = "/logFiles";
purgeLogFiles(directory);
}
public void purgeLogFiles(File logDir){
File[] logFiles = logDir.listFiles();
long oldestDate = Long.MAX_VALUE;
File oldestFile = null;
if( logFiles != null && logFiles.length >499){
//delete oldest files after theres more than 500 log files
for(File f: logFiles){
if(f.lastModified() < oldestDate){
oldestDate = f.lastModified();
oldestFile = f;
}
}
if(oldestFile != null){
oldestFile.delete();
}
}
}