gpt4 book ai didi

java - Spring 入站 channel 适配器 - 如何自动删除超过 10 天的文件夹和文件

转载 作者:行者123 更新时间:2023-12-02 10:52:02 25 4
gpt4 key购买 nike

Integration.xml - 这将获取目录中的所有文件

<int-file:inbound-channel-adapter id="delFiles" channel="delFiles" 
directory="C:/abc/abc" use-watch-service="true" prevent-duplicates="false" auto-startup="true"
watch-events="CREATE,MODIFY">
<int:poller fixed-delay="1000"/>
<int-file:nio-locker/>
</int-file:inbound-channel-adapter>

我需要删除该文件夹和子文件夹中超过 10 天的所有文件。有人可以帮忙吗?

监听器

@Transformer(inputChannel="delFiles")
public JobLaunchRequest deleteJob(Message<File> message) throws IOException {
Long timeStamp = message.getHeaders().getTimestamp();
return JobHandler.deleteJob(message.getPayload(), jobRepository, fileProcessor, timeStamp);
}

处理程序

public static JobLaunchRequest deleteJob(File file, JobRepository jobRepository, Job fileProcessor, Long timeStamp) throws IOException {

//Is there a way in spring integration whether I can check this easily?
//How to check for folder and subfolders?
// This will check for files once it's dropped.
// How to run this job daily to check the file's age and delete?

}

最佳答案

这不是 <int-file:inbound-channel-adapter>责任。这实际上是根据您提供的过滤设置从目录中轮询文件。

如果您对旧文件不感兴趣,您可以实现自定义 FileListFilter跳过非常旧的文件。

如果您仍然想删除这些旧文件作为某些应用程序功能,则需要查看其他解决方案,例如 @Scheduled方法它迭代该目录中的文件并删除它们,例如每天一次,假设是在午夜。

您还可以仅删除逻辑中已处理的文件。由于您使用 prevent-duplicates="false" ,您将一次又一次地轮询同一个文件。

要执行目录清理,您不需要 Spring Integration:

public void recursiveDelete(File file) {
if (file != null && file.exists()) {
File[] files = file.listFiles();
if (files != null) {
for (File fyle : files) {
if (fyle.isDirectory()) {
recursiveDelete(fyle);
}
else {
if (fyle.lastModified() > 10 * 24 * 60 * 60 * 1000) {
fyle.delete();
}
}
}
}
}
}

(您可能会稍微改进此功能:尚未测试...)

关于java - Spring 入站 channel 适配器 - 如何自动删除超过 10 天的文件夹和文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52096878/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com