java 定时器删除服务器文件

实现思路:

1、配置一个监听器

2、在监听器上配置一个定时器,用来执行定时任务

3、在任务管理器配置任务

Listener监听器:

package com.listener;

import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.Properties;
import java.util.Timer;
import java.util.TimerTask;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

//定时删除断点续传的附件
public class ExcelTempFileListener implements ServletContextListener {
	private Timer timer;
	private SystemTaskTest systemTask;
	private static String every_time_run;
	static {
		Properties prop = new Properties();
		InputStream inStrem = ExcelTempFileManager.class.getClassLoader()
				.getResourceAsStream("execl.properties");
		try {
			prop.load(inStrem);
			every_time_run = prop.getProperty("every_time_run");
 
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				inStrem.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
 
	// 监听器初始方法
	public void contextInitialized(ServletContextEvent sce) {
 
		timer = new Timer();
		systemTask = new SystemTaskTest(sce.getServletContext()
				.getRealPath("/"), sce.getServletContext());
		try {
			sce.getServletContext().log("定时器已启动");
			// 监听器获取网站的根目录
			Long time = Long.parseLong(every_time_run) * 1000 * 60 ;// 循环执行的时间
			// 第一个参数是要运行的代码,第二个参数是从什么时候开始运行,第三个参数是每隔多久在运行一次。重复执行
			timer.schedule(systemTask, 10000, time);
			sce.getServletContext().log("已经添加任务调度表");
		} catch (Exception e) {
		}
	}
 
	public void contextDestroyed(ServletContextEvent sce) {
		try {
			timer.cancel();
		} catch (Exception e) {
		}
	}
}
 
/**
 * 时间任务器
 * 
 * @author xdb
 */
class SystemTaskTest extends TimerTask {
	private ServletContext context;
	private String path;
	public SystemTaskTest(String path, ServletContext context) {
		this.path = path;
		this.context = context;
	}
 
	/**
	 * 把要定时执行的任务就在run中
	 */
	public void run() {	
		ExcelTempFileManager etf;	
		try {
			context.log("开始执行任务!");
			// 需要执行的代码
			etf = new ExcelTempFileManager(path);
			etf.run();		
			context.log("指定任务执行完成!");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

任务管理类:

package com.listener;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

public class ExcelTempFileManager implements Runnable {
	private static String path;// 路径

	
	/**
	 * 构造函数。初始化参数
	 * 
	 * @param path
	 */
	public ExcelTempFileManager(String path) {
		this.path = path;
	}

	/**
	 * 把线程要执行的代码放在run()中
	 */
	public void run() {
		path = path + "upload";
		File file = new File(path);
		deletefiles(file);
	}

	/**
	 * 批量删除文件
	 * 
	 * @param folder
	 */
	public void deletefiles(File folder) {
		File[] files = folder.listFiles();
		for (int i = 0; i < files.length; i++) {
			deleteFolder(files[i]);
		}
	}

	/**
	 * 删除文件
	 * 
	 * @param file
	 */
	private void deleteFile(File file) {
		try {
			if (file.isFile()) {
				// 删除符合条件的文件
				file.delete();
			} 
		} catch (Exception e) {
			e.printStackTrace();
		}
	}


	/**
	 * 删除文件夹
	 * 
	 * @param folder
	 */
	public void deleteFolder(File folder) {
		if (folder.isDirectory()) {
			File[] files = folder.listFiles();
			for (int i = 0; i < files.length; i++) {
				deleteFolder(files[i]);
			}
			// 非当前目录,删除
			if (!folder.getAbsolutePath().equalsIgnoreCase(path)) {
				folder.delete();
			}
		} else {
			deleteFile(folder);
		}
	}
}

web.xml中配置任务监听器

  
  <!-- 配置定时任务监听器 -->
  <listener>
	  <listener-class>com.listener.ExcelTempFileListener</listener-class>
  </listener>

execl.properties配置文件 :

#配置執行的时间,以分钟为单位:1440(60*24)为一天
every_time_run=1440

猜你喜欢

转载自blog.csdn.net/weixin_38319645/article/details/83591292