首页 > 编程语言 >java 定时任务实现 每隔10天 删除指定文件夹下的文件

java 定时任务实现 每隔10天 删除指定文件夹下的文件

时间:2023-08-09 22:38:13浏览次数:37  
标签:10 java 删除 文件夹 folder LocalDate

  1. 使用ScheduledExecutorService 实现

要在Java中实现每隔 10 天删除文件夹下的文件,可以使用定时任务来执行此操作。可以使用Java中的 ScheduledExecutorService 类来创建和管理定时任务,并使用 File 类来删除文件。

示例代码,用于实现每隔 10 天删除文件夹下的文件:

import java.io.File;
import java.time.LocalDate;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

public class FileDeletionTask {
    public static void main(String[] args) {
        // 创建 ScheduledExecutorService 对象
        ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();

        // 定义删除任务
        Runnable deletionTask = () -> {
            String folderPath = "/path/to/folder"; // 文件夹路径

            File folder = new File(folderPath);

            // 检查文件夹是否存在
            if (folder.exists() && folder.isDirectory()) {
                // 获取当前日期
                LocalDate currentDate = LocalDate.now();

                // 遍历文件夹下的文件
                for (File file : folder.listFiles()) {
                    long lastModifiedTime = file.lastModified();
                    LocalDate modifiedDate = LocalDate.ofEpochDay(lastModifiedTime / (24 * 60 * 60 * 1000));

                    // 如果文件修改日期在当前日期的前 10 天之前,则删除文件
                    if (currentDate.minusDays(10).isAfter(modifiedDate)) {
                        file.delete();
                        System.out.println("已删除文件:" + file.getName());
                    }
                }
            }
        };

        // 创建定时任务,每隔 10 天执行一次
        executor.scheduleAtFixedRate(deletionTask, 0, 10, TimeUnit.DAYS);
    }
}

使用 ScheduledExecutorService 创建了一个单线程的定时任务执行器。然后,定义了一个删除任务 deletionTask,其中指定了要删除的文件夹路径。在任务中,我们获取当前日期,并遍历文件夹下的文件。对于每个文件,将其最后修改日期与当前日期进行比较,如果该文件修改日期在当前日期的前 10 天之前,则删除该文件。

最后,通过调用 executor.scheduleAtFixedRate 方法创建定时任务,指定任务首次执行延迟时间为 0 天,之后每隔 10 天执行一次删除任务。

  1. 使用 Timer 实现

使用 Timer 定时任务来实现每隔 10 天删除文件夹下的文件

  1. 创建一个任务类来执行文件删除操作。可以创建一个名为 FileDeletionTask 的类,并在其中定义一个方法 deleteFiles(),用于删除文件夹下的文件。
import java.io.File;
import java.time.LocalDate;
import java.util.TimerTask;

public class FileDeletionTask extends TimerTask {
    public void deleteFiles() {
        String folderPath = "/path/to/folder"; // 文件夹路径

        File folder = new File(folderPath);

        // 检查文件夹是否存在
        if (folder.exists() && folder.isDirectory()) {
            // 获取当前日期
            LocalDate currentDate = LocalDate.now();

            // 遍历文件夹下的文件
            for (File file : folder.listFiles()) {
                long lastModifiedTime = file.lastModified();
                LocalDate modifiedDate = LocalDate.ofEpochDay(lastModifiedTime / (24 * 60 * 60 * 1000));

                // 如果文件修改日期在当前日期的前 10 天之前,则删除文件
                if (currentDate.minusDays(10).isAfter(modifiedDate)) {
                    file.delete();
                    System.out.println("已删除文件:" + file.getName());
                }
            }
        }
    }

    @Override
    public void run() {
        deleteFiles();
    }
}

创建测试类:

import java.util.Timer;

public class Main {
    public static void main(String[] args) {
        Timer timer = new Timer();

        // 创建任务对象
        FileDeletionTask fileDeletionTask = new FileDeletionTask();

        // 调度任务,在每隔 10 天执行一次
        timer.schedule(fileDeletionTask, 0, 10 * 24 * 60 * 60 * 1000);
    }
}

使用 Timer 类创建了一个定时器对象 timer。然后,我们创建了一个 FileDeletionTask 对象 fileDeletionTask,用于执行文件删除操作。最后,使用 timer.schedule() 方法调度任务,第一个参数是任务对象,第二个参数是延迟时间(此处设置为 0,表示立即执行),第三个参数是任务的周期(每隔 10 天执行一次)


标签:10,java,删除,文件夹,folder,LocalDate
From: https://blog.51cto.com/u_16176998/7026348

相关文章

  • 【JavaScript30】promise
    在前端js中是可以发送网络请求的,如果前端js的请求是线性的请求(同步),网站的体验会很差。设计js发请求的那个人.选择了使用异步执行方式.大幅度的提升用户体验.console.log("我要发请求了");setTimeout(function(){console.log("服务器返回结果了");},2000);//假设......
  • 深入源码分析:掌握Java设计模式的精髓
    深入源码分析:掌握Java设计模式的精髓作为一个开发人员,在进行一个项目的设计与实现的过程中,应当具备软件架构的全局观,对项目进行模块化的设计,并充分考虑代码的可复用性,用最少的代码实现最完备的功能,使代码简洁、优雅。优秀的系统应兼备功能强大、模块清晰、高扩展性,这离不开对各......
  • 面试题:使用Java代码实现B系统与A系统企业信息定时同步
    ​  java代码实现B系统与A系统企业信息的定时同步.具体要求如下:需要使用ApacheHttpComponentsClient实现接口调用;分页调用接口文档中“获取客户列表”接口接收数据,存储到customer表中;每10分钟同步一次企业信息;A系统企业出现增,删,改,B系统都能够同步;接口调用需要有......
  • 面试题:使用Java代码实现B系统与A系统企业信息定时同步
    ​  java代码实现B系统与A系统企业信息的定时同步.具体要求如下:需要使用ApacheHttpComponentsClient实现接口调用;分页调用接口文档中“获取客户列表”接口接收数据,存储到customer表中;每10分钟同步一次企业信息;A系统企业出现增,删,改,B系统都能够同步;接口调用需要有......
  • 普通Java项目实现定时任务
     在Java中,可以使用java.util.Timer或java.util.concurrent.ScheduledExecutorService类来实现定时任务。以下是使用java.util.Timer实现定时任务的示例代码:publicclassMyTimerTaskextendsTimerTask{@Overridepublicvoidrun(){//定时任务代码......
  • 普通Java项目实现定时任务
     在Java中,可以使用java.util.Timer或java.util.concurrent.ScheduledExecutorService类来实现定时任务。以下是使用java.util.Timer实现定时任务的示例代码:publicclassMyTimerTaskextendsTimerTask{@Overridepublicvoidrun(){//定时任务代码......
  • 遥遥领先 spring,中国人的 solon 来啦!10% 的体积,10倍的速度
    Solon是什么?Java生态型应用开发框架。它从零开始构建,有自己的标准规范与开放生态(历时五年,已有全球第二级别的生态规模)。与其他框架相比,它解决了两个重要的痛点:启动慢,费内存。2023年6月,Maven单月下载量突破200万。解决痛点?由于Solon Bean容器的独特设计,不会因为扩展依赖变多......
  • 普通Java项目实现定时任务
    ​ 在Java中,可以使用java.util.Timer或java.util.concurrent.ScheduledExecutorService类来实现定时任务。以下是使用java.util.Timer实现定时任务的示例代码:publicclassMyTimerTaskextendsTimerTask{@Overridepublicvoidrun(){//定时任务代码......
  • 普通Java项目实现定时任务
    ​ 在Java中,可以使用java.util.Timer或java.util.concurrent.ScheduledExecutorService类来实现定时任务。以下是使用java.util.Timer实现定时任务的示例代码:publicclassMyTimerTaskextendsTimerTask{@Overridepublicvoidrun(){//定时任务代码......
  • java23种设计模式之一: 责任链模式
    责任链模式,有多个对象,每个对象持有对下一个对象的引用,这样就会形成一条链,请求在这条链上传递,直到某一对象决定处理该请求。但是发出者并不清楚到底最终那个对象会处理该请求,所以,责任链模式可以实现,在隐瞒客户端的情况下,对系统进行动态的调整。......