您好,登錄后才能下訂單哦!
使用timer類定時(shí)調(diào)度,生成文件
timer類需要通過監(jiān)聽器來初始化定時(shí)器,web容器在運(yùn)行時(shí)自動(dòng)加載
先寫個(gè)定時(shí)任務(wù)類CreateFileTask,繼承至TimerTask,需要重寫run()方法
import java.io.BufferedWriter; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; import java.util.TimerTask; public class CreateFileTask extends TimerTask { //重寫的run方法 @Override public void run() { //寫入的文件數(shù)據(jù) String content=""; //文件路徑 String path = File.separator + "xxxx"; //文件名稱 String fileName ="xxx.avl"; //表示是否重新寫入,為true表示重頭開始寫,為false時(shí)文件存在則接著文件內(nèi)容尾部寫入數(shù)據(jù) boolean writeflag = false; /** * 此處省略獲取數(shù)據(jù)內(nèi)容代碼 * 。。。。 * byte[] b1 = {0x01};//以16進(jìn)制“01”作為內(nèi)容分隔符 *String b1Str = new String(b1); */ //執(zhí)行的任務(wù) this.writerFileDate(content, getCreateFile(path, fileName), writeflag); } /** * 創(chuàng)建文件路徑,并獲取文件名 * @return */ public String getCreateFile(String path,String fileName){ File file = new File(path+fileName); if(!file.exists()){//文件不存在 file.getParentFile().mkdirs();//創(chuàng)建文件目錄 } return path+fileName; } /** * 數(shù)據(jù)寫入到文件 * @param content */ public void writerFileDate(String content,String fileName,boolean writeflag){ BufferedWriter bw = null; try { bw = new BufferedWriter(new OutputStreamWriter( new FileOutputStream(fileName,writeflag))); bw.write(content); } catch (Exception e) { e.printStackTrace(); }finally{ try { if(bw!=null){ bw.close();// 關(guān)閉輸出流 } } catch (IOException e) { e.printStackTrace(); } } } }
2.寫一個(gè)監(jiān)聽器CreateFileListener類,實(shí)現(xiàn)ServletContextListener,重寫contextDestroyed,contextInitialized兩個(gè)方法
com.test.listener import java.util.Calendar; import java.util.Date; import java.util.Timer; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; public class CreateFileListener implements ServletContextListener { private Timer timer; /** * 銷毀 */ public void contextDestroyed(ServletContextEvent arg0) { // TODO Auto-generated method stub } /** * 初始化定時(shí)器 * web 程序運(yùn)行時(shí)候自動(dòng)加載 */ public void contextInitialized(ServletContextEvent arg0) { // TODO Auto-generated method stub /** * 設(shè)置一個(gè)定時(shí)器 */ timer = new Timer(); Calendar calendar = Calendar.getInstance(); int year = calendar.get(Calendar.YEAR); int month = calendar.get(Calendar.MONTH); int day =calendar.get(Calendar.DAY_OF_MONTH);//每天 //定制每天的1:00:00執(zhí)行 calendar.set(year, month, day, 12, 46, 00); Date taskDate = calendar.getTime(); //重復(fù)執(zhí)行時(shí)間:每隔60秒重復(fù)執(zhí)行 int period = 60*1000; //注意:schedule沒有period時(shí)是不會(huì)重復(fù)執(zhí)行的,即只執(zhí)行一次,詳細(xì)內(nèi)容參照api文檔 timer.schedule(new CreateFileTask(arg0.getServletContext()) , taskDate, period); }
3.web文件配置監(jiān)聽器
代碼:
<!-- 加載spring監(jiān)聽器 -->
<!-- 加載spring監(jiān)聽器 --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener<stener-class> <stener> <listener> <listener-class>com.zzq.survey.listener.CardPayReportTaskListener</listener-class> <stener>
注:在啟動(dòng)tomcat的時(shí)候,就會(huì)自動(dòng)加載web容器,會(huì)立馬自動(dòng)執(zhí)行一次timer定時(shí)調(diào)度。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。