接触到一个需求,需要将每次temp目录保存的临时文件在指定的时间内根据时间排序,删除最早的几个文件
话不多说,直接上代码
/**
* 定时删除临时文件
*/
public void deleteFiles(){
String defaultTempBaseDir = FileUploadUtils.getDefaultTempBaseDir();
List<File> allFiles = FileUtils.getAllFiles(defaultTempBaseDir);
// 按照文件最后修改时间排序
allFiles.sort(Comparator.comparingLong(File::lastModified));
int numToDelete = 10; // 需要删除的文件数
if (allFiles.size() > numToDelete) {
for (int i = 0; i < numToDelete; i++) {
File fileToDelete = allFiles.get(i);
if (fileToDelete.delete()) {
System.out.println("成功删除文件: " + fileToDelete.getAbsolutePath());
} else {
System.out.println("无法删除文件: " + fileToDelete.getAbsolutePath());
}
}
}
}
/**
* 根据指定目录路径将其下所有的文件取出来,包括子目录
* @param directoryPath 目录路径
* @return 所有文件
*/
public static List<File> getAllFiles(String directoryPath) {
File directory = new File(directoryPath);
List<File> allFiles = new ArrayList<>();
File[] files = directory.listFiles();
if (files != null) {
for (File file : files) {
if (file.isDirectory()) {
allFiles.addAll(getAllFiles(file.getPath())); // 递归处理子目录
} else {
allFiles.add(file);
}
}
}
return allFiles;
}
最后直接在数据库配置好cron表达式来实现定时执行即可 (每周星期天凌晨1点执行)