【定时任务,每天固定时间执行——创建文件夹 和 删除文件】

1.启动类

package com.example.demo.scheduledtask;

public class Do {

    public static void main(String[] args) {
        //定时任务
        TimerManager tManager = new TimerManager();
        tManager.statImplement();
    }

}

 2.计时器管理器

package com.example.demo.scheduledtask;

import java.util.Calendar;
import java.util.Date;
import java.util.Timer;

public class TimerManager {

    public TimerManager() {};

    // 执行方法
    public void statImplement() {
        Calendar calendar = Calendar.getInstance();

        /*** 定制每日执行方法的时间 ***/
        calendar.set(Calendar.HOUR_OF_DAY, SetUpEnum.HOUR_OF_DAY.getTime());
        calendar.set(Calendar.MINUTE, SetUpEnum.MINUTE_OF_DAY.getTime());
        calendar.set(Calendar.SECOND, SetUpEnum.SECOND_OF_DAY.getTime());

        Date date=calendar.getTime(); //第一次执行定时任务的时间

        //如果第一次执行定时任务的时间 小于 当前的时间
        //此时要在 第一次执行定时任务的时间 加一天,以便此任务在下个时间点执行。如果不加一天,任务会立即执行。
        if (date.before(new Date())) {
            date = this.addDay(date, 1);
        }

        Timer timer = new Timer();

        //安排指定的任务在指定的时间开始进行重复的固定延迟执行。
        NFDFlightDataTimerTask task = new NFDFlightDataTimerTask();
        timer.schedule(task,date,SetUpEnum.PERIOD_DAY.getTime());
    }


    // 增加或减少天数
    public Date addDay(Date date, int num) {
        Calendar startDT = Calendar.getInstance();
        startDT.setTime(date);
        startDT.add(Calendar.DAY_OF_MONTH, num);
        return startDT.getTime();
    }
    
}

 3.计时器任务

package com.example.demo.scheduledtask;

import java.io.File;
import java.math.BigDecimal;
import java.math.MathContext;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimerTask;

import com.sun.istack.internal.logging.Logger;

public class NFDFlightDataTimerTask extends TimerTask {

    private static Logger log = Logger.getLogger(NFDFlightDataTimerTask.class);

    @Override
    public void run() {
        // 在try里写要执行的内容
        try {
            String pathNameEstablish = SetUpEnum.Establish_PathName.getMessage();
            //删除空文件夹
            delNullFolder(pathNameEstablish);
            //创建文件夹
            String fileName = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
            boolean newMkdir = newMkdir(pathNameEstablish,fileName);
            if (newMkdir){
                log.info("-------------创建文件夹成功--------------------------------------------------------");
            }
            //删除微信日志
            String pathNameDel = SetUpEnum.Del_PathName.getMessage();
            int num = fileDelete(pathNameDel);
            if (num > 0){
                log.info("-------------成功删除" + num + "个微信日志文件------------------------------------------------");
            }
        } catch (Exception e) {
            log.info("-------------解析信息发生异常--------------");
        }
    }

    //创建文件夹
    public boolean newMkdir(String pathNameEstablish,String fileName){
        File fileNew = new File(pathNameEstablish + fileName);
        log.info("-------------正在创建【" + pathNameEstablish + fileName + "】文件夹----------------");
        //创建一个文件夹(目录),若存在,则不创建,只能创建单层目录
        boolean mkdir = fileNew.mkdir();
        if (!mkdir){
            log.info("-------------创建文件夹失败-------------------------------------------------------");
        }
        return mkdir;
    }

    //删除空文件夹
    public static void delNullFolder(String parhName){
        File file = new File(parhName);  // 当前目录下的 testdir目录
        File[] files = file.listFiles();//拿到file目录下第一层文件
        if(files==null || files.length <= 0){
            log.info("-------------当前目录为空--------------");
        }else{//该目录下有文件,for循环遍历
            for (File f : files) {
                String fileName = f.getName();
                String folderName = parhName + fileName;
                File folder = new File(folderName);  // 当前目录下的 testdir目录
                File[] folders = folder.listFiles();//拿到file目录下第一层文件
                if (folders == null || folders.length <= 0){
                    log.info("-------------【" + parhName + fileName + "】目录为空需要删除--------------");
                    boolean delete = f.delete();
                    log.info("-------------删除目录【" + f + "】--->  " + delete + "  ---------");
                } else {
                    log.info("-------------【" + parhName + fileName + "】目录不为空--------------------");
                }
            }
        }
    }

    //获取文件大小
    public static String getFileSize(File file) {
        double result = 0;
        String unit = "字节";
        long length = file.length();
        if(length < 1024) {
            result = length;
        }
        else if(length < (1024*1024)) {
            result = length / 1024.0;
            unit = "KB";
        }
        else if(length < (1024*1024*1024)) {
            result = length / (1024.0/1024);
            unit = "MB";
        }
        else {
            result = length / (1024.0/1024/1024);
            unit = "GB";
        }
        BigDecimal bigDecimal=new BigDecimal(result + "",new MathContext(3));
        return bigDecimal.doubleValue() + unit;
    }

    //删除微信日志
    public int fileDelete(String pathNameDel){
        int num = 0;
        File file = new File(pathNameDel);
        File[] files = file.listFiles();//拿到file目录下第一层文件
        if(files==null || files.length<=0){
            log.info("-------------当前目录为空--------------");
        }else{//该目录下有文件,for循环遍历
            for (File f : files) {
                String fileName = f.getName();
                String suffix = fileName.substring(fileName.lastIndexOf(".") + 1);
                if ("xlog".equals(suffix)) {
                    //若f是.xlog文件,删除f
                    String fileSize = getFileSize(f);
                    boolean delete = f.delete();
                    num++;
                    log.info("-------------删除文件【" + f + " " + fileSize + "】" + "  --->  " + delete);
                }
            }
            if (num == 0){
                log.info("-------------当前目录暂无.xlog后缀文件--------------");
            }
        }
        return num;
    }

}

4.创建/删除条件枚举类

package com.example.demo.scheduledtask;

import java.text.SimpleDateFormat;
import java.util.Date;

public enum SetUpEnum {

    /* 当前为每天九点执行 */

    /*执行时间*/
    HOUR_OF_DAY("时",9),
    MINUTE_OF_DAY("分",0),
    SECOND_OF_DAY("秒",0),
    PERIOD_DAY("时间间隔",24 * 60 * 60 * 1000),
    /*创建文件名*/
    File_Name("创建文件名", new SimpleDateFormat("yyyy-MM-dd").format(new Date()) ),
    /*文件地址*/
    Establish_PathName("创建文件夹地址","D:\\desk\\Songxianpeng\\work\\"),
    Del_PathName("删除微信日志地址","C:\\Users\\dell\\AppData\\Roaming\\Tencent\\WeChat\\log");

    private String name;
    private String message;
    private Integer time;

    private SetUpEnum(String name, String message){
        this.name = name;
        this.message = message;
    }

    private SetUpEnum(String name, Integer time){
        this.name = name;
        this.time = time;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public Integer getTime() {
        return time;
    }

    public void setTime(Integer time) {
        this.time = time;
    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值