使用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定时调度。
时间: 2024-10-23 14:48:20