使用timer類定時調度,生成文件
timer類需要通過監聽器來初始化定時器,web容器在運行時自動加載
先寫個定時任務類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() { //寫入的文件數據 String content=""; //文件路徑 String path = File.separator + "xxxx"; //文件名稱 String fileName ="xxx.avl"; //表示是否重新寫入,為true表示重頭開始寫,為false時文件存在則接著文件內容尾部寫入數據 boolean writeflag = false; /** * 此處省略獲取數據內容代碼 * 。。。。 * byte[] b1 = {0x01};//以16進制“01”作為內容分隔符 *String b1Str = new String(b1); */ //執行的任務 this.writerFileDate(content, getCreateFile(path, fileName), writeflag); } /** * 創建文件路徑,并獲取文件名 * @return */ public String getCreateFile(String path,String fileName){ File file = new File(path+fileName); if(!file.exists()){//文件不存在 file.getParentFile().mkdirs();//創建文件目錄 } return path+fileName; } /** * 數據寫入到文件 * @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();// 關閉輸出流 } } catch (IOException e) { e.printStackTrace(); } } } }
2.寫一個監聽器CreateFileListener類,實現ServletContextListener,重寫contextDestroyed,contextInitialized兩個方法
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 } /** * 初始化定時器 * web 程序運行時候自動加載 */ public void contextInitialized(ServletContextEvent arg0) { // TODO Auto-generated method stub /** * 設置一個定時器 */ 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執行 calendar.set(year, month, day, 12, 46, 00); Date taskDate = calendar.getTime(); //重復執行時間:每隔60秒重復執行 int period = 60*1000; //注意:schedule沒有period時是不會重復執行的,即只執行一次,詳細內容參照api文檔 timer.schedule(new CreateFileTask(arg0.getServletContext()) , taskDate, period); }
3.web文件配置監聽器
代碼:
<!-- 加載spring監聽器 -->
<!-- 加載spring監聽器 --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener<stener-class> <stener> <listener> <listener-class>com.zzq.survey.listener.CardPayReportTaskListener</listener-class> <stener>
注:在啟動tomcat的時候,就會自動加載web容器,會立馬自動執行一次timer定時調度。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。