删除指定目录下过期文件并打印日志
肯定会遇到这样的事,有一个文件夹,每天都在生成文件,那么如何去删除那些过期的文件呢。废话不多说,直接上代码:
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.text.SimpleDateFormat;
public class DeleteFileImpl {
//这三个变量也可以在配置文件里面配置,但是需要用到@Value或者直接配置一个Pojo提供get,set方法, 我这里直接写死了,如果需要动态改变可以自己添加
//你要删除的文件夹
public final static String dirPathDel="D:\\ftp\\2019v\\12";
//你要打印的日志文件
public final static String dirPathLog="G:\\log";
//删除多少天前的文件
public final static long deleteDay=20;
public static void main(String[] args) {
info(dirPathDel,dirPathLog,deleteDay);
}
public static boolean info(String dirPathDel,String dirPathLog,long deleteDay) {
File file = new File(dirPathDel);
if (!file.exists()) {//判断是否待删除目录是否存在
System.out.println("这个要删除的目录都不存在");
return false;
}
String[] content = file.list();//取得当前目录下所有文件和文件夹
for (String name : content) {
File temp = new File(dirPathDel, name);
if (temp.isDirectory()) {
info(temp.getAbsolutePath(), dirPathLog, deleteDay);
temp.delete();
} else {
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
//创建您要写入的日志文件
String file1 = dirPathLog + "/del_path" + sdf1.format(System.currentTimeMillis()) + "日志" + ".txt"; //写入的是否操作
FileWriter fw = null;
BufferedWriter bw = null;
//获得绝对路径下的文件及文件夹
File absFile = temp.getAbsoluteFile();
//计算时间
long day = deleteDay;
long hour = 24;
long minute = 60;
long second = 60;
long mmcond = 1000;
long currTime = System.currentTimeMillis(); //当前时间
long lastTime = absFile.lastModified(); //文件被最后一次修改的时间
//时间差
long diffen = currTime - lastTime;
long thDay = day * hour * minute * second * mmcond;
//
if (diffen >= thDay) {
boolean deleteSuccessOrFailed = temp.delete();
if (!deleteSuccessOrFailed) {
System.out.println(temp.getAbsoluteFile() + "\t" + "Failed to delete");
}
}
long delTime = lastTime + thDay; //要删除文件及文件夹的时间--毫秒数
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS"); //2017-5-5 23:32:23:234
//如果程序一直在运行那么,这个删除时间是没有错误的,但是现在是文件已经生成了,但是并没有同时进行删除,而是后来才进行的删除功能,所以时间就按照电脑系统时间即可
String formatTime = sdf.format(delTime);
String deleteTime = sdf.format(currTime);
String state;
if (delTime > currTime) {
state = "未删除";
System.out.println("文件:" + "\t" + absFile.getAbsolutePath() + state);
} else {
state = "已删除";
System.out.println("文件:" + "\t" + absFile.getAbsolutePath() + state);
}
String strDel = "删除该文件的时间是:" + "\t" + formatTime + "\t" + "\t删除的文件是:" + absFile.getAbsolutePath() + "\t当前系统时间:" + deleteTime + "\t当前文件状态:" + "----------------" + state + "\n"; //absFile.getAbsolutePath()获得你要删除文件的绝对路径
try {
fw = new FileWriter(file1, true);
bw = new BufferedWriter(fw);
bw.write(strDel);
bw.newLine(); //换行
bw.flush();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
bw.close();
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
return true;
}
}
转发请复制: https://www.cnblogs.com/Mr-yang1/p/DeleteOutDateFiles.html