1. 程式人生 > >java 定時器刪除伺服器檔案

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