java监听器定时删除服务器上的文件(一)

2014-11-24 07:48:21 · 作者: · 浏览: 0


实现思想:

1、配置一个ServletContextListener监听器

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

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

实现代码:

Listener监听器类:

package com.chinacreator.report.listener;

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

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

import com.chinacreator.report.thread.ExcelTempFileManager;

/**
 * 时间监听器
 * 
 * @author xiaoqun.yi
 */
public class ExcelTempFileListener implements ServletContextListener {
	private Timer timer = new Timer();
	public static ServletContext servletContext;

	public void contextInitialized(ServletContextEvent sce) {
		this.servletContext = sce.getServletContext();
		try {

			// 第一个参数是要运行的代码,第二个参数是从什么时候开始运行,第三个参数是每隔多久在运行一次。
			// timer.schedule(new SystemTaskTest(),0,(5*1000));
			sce.getServletContext().log("定时器已启动");
			// 设置在每晚24:0分执行任务
			Calendar calendar = Calendar.getInstance();
			calendar.set(Calendar.HOUR_OF_DAY, 24); // 24 ,可以更改时间
			calendar.set(Calendar.MINUTE, 0); // 0可以更改分数
			calendar.set(Calendar.SECOND, 0);// 0 //默认为0,不以秒计
			Date date = calendar.getTime();
			// 监听器获取网站的根目录
			String path = sce.getServletContext().getRealPath("/");
			// 第一个参数 是要运行的代码,第二个参数是指定的时间
			timer.schedule(new SystemTaskTest(path), date);
			sce.getServletContext().log("已经添加任务调度表");

		} catch (Exception e) {
		}
	}

	public void contextDestroyed(ServletContextEvent sce) {
		try {
			timer.cancel();
		} catch (Exception e) {
		}
	}
}

/**
 * 时间任务器
 * 
 * @author xiaoqun.yi
 */
class SystemTaskTest extends TimerTask {
	private String path;

	public SystemTaskTest(String path) {
		this.path = path;
	}

	/**
	 * 把要定时执行的任务就在run中
	 */
	public void run() {
		try {
			System.out.println("path======" + path);
			System.out.println("date===" + new Date().getMinutes());
			for (int i = 0; i < 10; i++) {
				System.out.println("say hello");
			}
			ExcelTempFileManager etf = new ExcelTempFileManager(path);
			etf.run();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

execl.properties

#配置服务器excel文件存放的时间,以分钟为单位一天可以这样表示 :1440(60*24)为一天,等以此类推
file_retention_time=60
删除服务器的文件类:

package com.chinacreator.report.thread;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;


/**
 * 删除服务器上的文件
 * @author xiaoqun.yi
 */
//实现Runnable接口(推荐),可以线程接口,预留一个extends(继承),方便扩展
public class ExcelTempFileManager implements Runnable {
	private static String path;//路径

	private static String RETENTION_TIME = "";// 文件保存的时间
	static {
		Properties prop = new Properties();
		InputStream inStrem = ExcelTempFileManager.class.getClassLoader()
				.getResourceAsStream("execl.properties");
		try {
			prop.load(inStrem);
			RETENTION_TIME = prop.getProperty("file_retention_time");

		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				inStrem.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	/**
	 * 构造函数。初始化参数
	 * @param path
	 */
	public ExcelTempFileManager(String path) {
		this.path = path;
		System.out.println("path____________________" + path);
	}
	/**
	 * 把线程要执行的代码放在run()中
	 */
	public void run() {
		System.out.println("文件管理开始=========");
		path = path + "exportExcel";
		System.out.println("path     " + path);