想要在50到300天之间删除数百万个旧文件,如果我使用简单的spring任务,那么性能开销也会用于删除带文件夹的文件。删除再次需要递归方法的文件夹。
什么方法会很好,任何建议或解决方案。
答案 0 :(得分:2)
我不确定我是否完全理解你的问题,但这里是一个Spring Boot应用程序中的一个计划任务的例子,它以递归的方式查找所有文件,从根路径开始,然后删除任何尚未存在的文件在过去50天内修改过。
此任务每10秒运行一次。
@Service
public class FileService {
@Scheduled(fixedDelay = 10000)
public void deleteFilesScheduledTask() throws IOException {
findFiles("C:/testing");
}
public void findFiles(String filePath) throws IOException {
List<File> files = Files.list(Paths.get(filePath))
.map(path -> path.toFile())
.collect(Collectors.toList());
for(File file: files) {
if(file.isDirectory()) {
findFiles(file.getAbsolutePath());
} else if(isFileOld(file)){
deleteFile(file);
}
}
}
public void deleteFile(File file) {
file.delete();
}
public boolean isFileOld(File file) {
LocalDate fileDate = Instant.ofEpochMilli(file.lastModified()).atZone(ZoneId.systemDefault()).toLocalDate();
LocalDate oldDate = LocalDate.now().minusDays(50);
return fileDate.isBefore(oldDate);
}
}
希望这能让您了解如何在自己的应用中实现此功能。