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;
}
}