请教,java定期写文件问题,请教,JAVA定期写文件问题,谢谢! 需求是这样,现在有大数据量的数据,要写文件保存,要求是:1、用JAVA将数据写入文件,每10分钟切换一个文件。2、文件命名以时间交替下去,例如,2009-08-24 14:00.txt、2009-08-24 14:10.txt 或者200908241400.txt、200908241410.txt、.....请教大家,谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 在你的工程中使用Spring+quartz,快速完成一个定时器,定时写文件,文件名称取格式化后的系统时间 Spring Quartz 实现起来好方便的 quartz我用过,它用来控制定时的任务是挺方便Spring+quartz 具体指的是?有否小例子贴一个,谢谢 log4j可以干,可是有可能有问题.定时器在交换文件的时候处理也肯能有点累.但是我的办法是自己实现了一个写数据机制.首先,把输出数据和输出时间组合在一起,看做消息.然后实现一个消息队列.然后每次轮询,取出队列中所有消息,根据时间,拼接好要输出的byte[],然后打开时间对应的文件写入.注意多线程处理.得到的是一个比log4j效率高跟多的文件日志模块.楼主喜欢自己写,中间很多问题等待你解决:) Quartz 简单"0 0,10,20,30,4,50 * * *"这么写就可以了。他们会在指定的时间启动你的程序的。你的程序根据当前时间,写对应的日志就行了。 队列要自己实现.用这个就是为了不堵.每次轮询的时候引用当前的队列尾部,他们新的数据过来,往后加就不管了,这次就处理这么多.因为不同的节点是不同对象,所以添加数据的时候和删除不用同步在一个对象上.当时这个东西多线程添加消息,单线程输出文件.同步处理费了点功夫,不过不难.内存消耗多些,尽量重用byte[].测试过10000多线程不停的输出.window,双核机器,和Log4j比较,log4j死了;我的运行时消耗资源大,但是没死,没丢数据.关键在于,每次同一个文件的数据要在程序里面拼好,每次就write一次. 下面是一个用Timer的示例代码.import java.io.*;import java.util.*;import java.text.*;public class Test{ //public static Timer t=new Timer(); public static void main(String args[]) throws Exception { long timeT=0; //下面的循环是为了从下一下整10分钟开始: // do{ timeT=System.currentTimeMillis()/1000; }while(timeT%600!=0); //开始计时,并每隔10分钟执行一次wirteFile(); // Timer t=new Timer(); t.schedule(new TimerTask(){ public void run(){ writeFile(); } },0,600000); //1000*60*10为10分钟 }}我的测试结果:F:\java>java Testwriting to file :20090824034000.txtwaiting......writing to file :20090824035000.txtwaiting...... import java.io.*;import java.util.*;import java.text.*;public class Test{ //public static Timer t=new Timer(); public static void main(String args[]) throws Exception { long timeT=0; //下面的循环是为了从下一下整10分钟开始: // do{ timeT=System.currentTimeMillis()/1000; }while(timeT%600!=0); //开始计时,并每隔10分钟执行一次wirteFile(); // Timer t=new Timer(); t.schedule(new TimerTask(){ public void run(){ writeFile(); } },0,600000); //1000*60*10为10分钟 } public static void writeFile(){ SimpleDateFormat sdf=new SimpleDateFormat("yyyyMMddhhmmss"); String fileName=sdf.format(new Date())+".txt"; //用日期生成文件名. System.out.println("writing to file :"+fileName); System.out.println("waiting......"); }} 读到一篇很困惑的线程安全的文章 struts2标签问题,求教~ 输入数据流不完整 一个数组的问题 java与数据库 (急!)在SWT中,怎么把其他exe文件运行打开时界面嵌入视图中, 请问如何从 UDP数据报 当中读取JPG图片并显示啊 一个简单问题. 学java的两最? 菜鸟想学,各位大虾指点我该如何学习,我下的jb5为rar,这是什么呀 static修饰的静态对象是什么时候生成的? 求一个字符串操作的简便方法
Spring+quartz 具体指的是?有否小例子贴一个,谢谢
定时器在交换文件的时候处理也肯能有点累.但是我的办法是自己实现了一个写数据机制.首先,把输出数据和输出时间组合在一起,看做消息.然后实现一个消息队列.然后每次轮询,取出队列中所有消息,根据时间,拼接好要输出的byte[],然后打开时间对应的文件写入.注意多线程处理.
得到的是一个比log4j效率高跟多的文件日志模块.楼主喜欢自己写,中间很多问题等待你解决:)
"0 0,10,20,30,4,50 * * *"这么写就可以了。他们会在指定的时间启动你的程序的。你的程序根据当前时间,写对应的日志就行了。
每次轮询的时候引用当前的队列尾部,他们新的数据过来,往后加就不管了,这次就处理这么多.因为不同的节点是不同对象,所以添加数据的时候和删除不用同步在一个对象上.当时这个东西多线程添加消息,单线程输出文件.同步处理费了点功夫,不过不难.内存消耗多些,尽量重用byte[].测试过10000多线程不停的输出.window,双核机器,和Log4j比较,log4j死了;我的运行时消耗资源大,但是没死,没丢数据.
关键在于,每次同一个文件的数据要在程序里面拼好,每次就write一次.
import java.util.*;
import java.text.*;
public class Test{
//public static Timer t=new Timer();
public static void main(String args[]) throws Exception {
long timeT=0;
//下面的循环是为了从下一下整10分钟开始:
//
do{
timeT=System.currentTimeMillis()/1000;
}while(timeT%600!=0);
//开始计时,并每隔10分钟执行一次wirteFile();
//
Timer t=new Timer();
t.schedule(new TimerTask(){
public void run(){
writeFile();
}
},0,600000); //1000*60*10为10分钟
}
}我的测试结果:F:\java>java Test
writing to file :20090824034000.txt
waiting......
writing to file :20090824035000.txt
waiting......
import java.text.*;
public class Test{
//public static Timer t=new Timer();
public static void main(String args[]) throws Exception {
long timeT=0;
//下面的循环是为了从下一下整10分钟开始:
//
do{
timeT=System.currentTimeMillis()/1000;
}while(timeT%600!=0);
//开始计时,并每隔10分钟执行一次wirteFile();
//
Timer t=new Timer();
t.schedule(new TimerTask(){
public void run(){
writeFile();
}
},0,600000); //1000*60*10为10分钟
} public static void writeFile(){
SimpleDateFormat sdf=new SimpleDateFormat("yyyyMMddhhmmss");
String fileName=sdf.format(new Date())+".txt"; //用日期生成文件名.
System.out.println("writing to file :"+fileName);
System.out.println("waiting......");
}
}