JAvaリスナーはサーバ上のファイルをタイミング的に削除します
8638 ワード
実現思想:
1.サーブレットContextListenerリスナーを構成する
2、リスナーにタイマーを配置し、タイミングタスクを実行する
3、タスクマネージャでタスクを構成する
実装コード:
Listenerリスナークラス:
web.xmlのファイル構成:
プレゼンテーションの実行:(本人が変更した実行時間は23:17で、プレゼンテーションが便利)
本文はブロガーのオリジナル文章で、ブロガーの許可を得ずに転載してはならない.
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で、プレゼンテーションが便利)
本文はブロガーのオリジナル文章で、ブロガーの許可を得ずに転載してはならない.