使用timer类定时调度,生成文件

timer类需要通过监听器来初始化定时器,web容器在运行时自动加载

先写个定时任务类CreateFileTask,继承至TimerTask,需要重写run()方法

importjava.io.BufferedWriter;importjava.io.File;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.OutputStreamWriter;importjava.util.TimerTask;publicclassCreateFileTaskextendsTimerTask{//重写的run方法@Overridepublicvoidrun(){//写入的文件数据Stringcontent="";//文件路径Stringpath=File.separator+"xxxx";//文件名称StringfileName="xxx.avl";//表示是否重新写入,为true表示重头开始写,为false时文件存在则接着文件内容尾部写入数据booleanwriteflag=false;/***此处省略获取数据内容代码*。。。。*byte[]b1={0x01};//以16进制“01”作为内容分隔符*Stringb1Str=newString(b1);*///执行的任务this.writerFileDate(content,getCreateFile(path,fileName),writeflag);}/***创建文件路径,并获取文件名*@return*/publicStringgetCreateFile(Stringpath,StringfileName){Filefile=newFile(path+fileName);if(!file.exists()){//文件不存在file.getParentFile().mkdirs();//创建文件目录}returnpath+fileName;}/***数据写入到文件*@paramcontent*/publicvoidwriterFileDate(Stringcontent,StringfileName,booleanwriteflag){BufferedWriterbw=null;try{bw=newBufferedWriter(newOutputStreamWriter(newFileOutputStream(fileName,writeflag)));bw.write(content);}catch(Exceptione){e.printStackTrace();}finally{try{if(bw!=null){bw.close();//关闭输出流}}catch(IOExceptione){e.printStackTrace();}}}}


2.写一个监听器CreateFileListener类,实现ServletContextListener,重写contextDestroyed,contextInitialized两个方法

com.test.listenerimportjava.util.Calendar;importjava.util.Date;importjava.util.Timer;importjavax.servlet.ServletContextEvent;importjavax.servlet.ServletContextListener;publicclassCreateFileListenerimplementsServletContextListener{privateTimertimer;/***销毁*/publicvoidcontextDestroyed(ServletContextEventarg0){//TODOAuto-generatedmethodstub}/***初始化定时器*web程序运行时候自动加载*/publicvoidcontextInitialized(ServletContextEventarg0){//TODOAuto-generatedmethodstub/***设置一个定时器*/timer=newTimer();Calendarcalendar=Calendar.getInstance();intyear=calendar.get(Calendar.YEAR);intmonth=calendar.get(Calendar.MONTH);intday=calendar.get(Calendar.DAY_OF_MONTH);//每天//定制每天的1:00:00执行calendar.set(year,month,day,12,46,00);DatetaskDate=calendar.getTime();//重复执行时间:每隔60秒重复执行intperiod=60*1000;//注意:schedule没有period时是不会重复执行的,即只执行一次,详细内容参照api文档timer.schedule(newCreateFileTask(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定时调度。