使用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定时调度。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。