JAvaリスナーはサーバ上のファイルをタイミング的に削除します

8638 ワード

実現思想:
1.サーブレットContextListenerリスナーを構成する
2、リスナーにタイマーを配置し、タイミングタスクを実行する
3、タスクマネージャでタスクを構成する
実装コード:
Listenerリスナークラス:
 
 
package com.chinacreator.report.listener;
import java.io.IOException;
import java.io.InputStream;
import java.util.Calendar;
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;
import com.chinacreator.report.thread.ExcelTempFileManager;

/**
 *      
 * 
 * @author xiaoqun.yi
 */
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("      ");
			//      24:0     
			// Calendar calendar = Calendar.getInstance();
			// //calendar.set(Calendar.HOUR_OF_DAY, 24); // 24 ,      
			// calendar.set(Calendar.MINUTE, 28); // 0      
			// calendar.set(Calendar.SECOND, 0);// 0 //   0,    
			// Date date = calendar.getTime();
			//            
			String path = sce.getServletContext().getRealPath("/");
			Long time = Long.parseLong(every_time_run) * 1000;//        
			System.out.println("time" + time);
			//             ,            ,     
			// timer.schedule(systemTask,time);
			//             ,               ,               。    
			timer.schedule(systemTask, 10000, time);
			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 ServletContext context;
	private String path;
	private static String every_time_run;
	public SystemTaskTest(String path, ServletContext context) {
		this.path = path;
		this.context = context;
	}

	/**
	 *            run 
	 */
	public void run() {	
		ExcelTempFileManager etf;	
		try {
			context.log("      !");
			//        
			System.out.println(new Date().toLocaleString());
			System.out.println("path======" + path);
			etf = new ExcelTempFileManager(path);
			etf.run();		
			context.log("        !");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
execl.properties

 
 
#     excel       ,               :1440(60*24)   ,     
file_retention_time=60
#        
every_time_run=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);
		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++) {
			deleteFile(files[i]);
		}
	}

	/**
	 *     
	 * 
	 * @param file
	 */
	private void deleteFile(File file) {
		try {
			if (file.isFile()) {
				//          
				if (canDeleteFile(file)) {
					if (file.delete()) {
						System.out.println("  " + file.getName() + "    !");
					} else {
						System.out.println("  " + file.getName()
								+ "    !          ");
					}
				} else {

				}
			} else {
				System.out.println("          ");
			}

		} catch (Exception e) {
			System.out.println("      ========");
			e.printStackTrace();
		}
	}

	/**
	 *            
	 */
	private boolean canDeleteFile(File file) {
		Date fileDate = getfileDate(file);
		Date date = new Date();
		long time = (date.getTime() - fileDate.getTime()) / 1000 / 60
				- Integer.parseInt(RETENTION_TIME);//             
		if (time > 0) {
			return true;
		} else {
			return false;
		}

	}

	/**
	 *            
	 * 
	 * @param file
	 * @return
	 */
	private Date getfileDate(File file) {
		long modifiedTime = file.lastModified();
		Date d = new Date(modifiedTime);
		return d;
	}

	/**
	 *      ,    
	 */
	private String formatDate(Date date) {
		// SimpleDateFormat f=new SimpleDateFormat("yyyyMMdd hh:mm:ss");//12   
		SimpleDateFormat f = new SimpleDateFormat("yyyyMMdd HH:mm:ss");//24   
		String formateDate = f.format(date);
		return formateDate;
	}

	/**
	 *      
	 * 
	 * @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)) {

				//     30        
				if (canDeleteFile(folder)) {
					if (folder.delete()) {
						System.out.println("   " + folder.getName() + "    !");
					} else {
						System.out.println("   " + folder.getName()
								+ "    !               ");
					}
				}
			}
		} else {
			deleteFile(folder);
		}

	}

}

web.xmlのファイル構成:
	<!--           -->
	<listener>
		<listener-class>com.chinacreator.report.listener.ExcelTempFileListener</listener-class>
	</listener>
 

プレゼンテーションの実行:(本人が変更した実行時間は23:17で、プレゼンテーションが便利)
本文はブロガーのオリジナル文章で、ブロガーの許可を得ずに転載してはならない.