java 定時器刪除伺服器檔案
阿新 • • 發佈:2018-11-23
實現思路:
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