关于上述主题的简短问题。基本上,我正在编写一个软件,它从网络中捕获数据并将其写入外部文件以供进一步处理。
我想知道的是,为了达到预期的效果,最好使用哪些代码。
感谢您的时间
大卫
答案 0 :(得分:6)
我可能会使用TimerTask来实现它。例如,
int hour = 1000*60*60;
int delay = 0;
Timer t = new Timer();
t.scheduleAtFixedRate(new TimerTask() {
public void run() {
// Write to disk ...
}
}, delay, hour);
否则quarts是一个功能强大的java调度程序,它能够处理更高级的调度需求。
答案 1 :(得分:4)
您可以使用Executor
框架,这是一个示例实现:
final List<String> myData = new ArrayList<String>();
final File f = new File("some/file.txt");
final Runnable saveListToFileJob = new Runnable(){
@Override
public void run(){ /* this uses Guava */
try{
Files.write(
Joiner.on('\n').join(myData),
f, Charsets.UTF_8);
} catch(final IOException e){
throw new IllegalStateException(e);
}
}
};
Executors
.newScheduledThreadPool(1) /* one thread should be enough */
.scheduleAtFixedRate(saveListToFileJob,
1000 * 60 /* 1 minute initial delay */,
1, TimeUnit.MINUTES /* run once every minute */);
答案 2 :(得分:0)
这个问题可能需要更多细节。解决方案的哪个部分会给您带来麻烦?
您还应该更详细地描述问题域,因为它可能会显着影响可能提供的任何解决方案。例如:
仅仅是我最初的预感 - 在设计解决方案时我会想到的一些想法会涉及某种生产者 - 消费者方法。
我可能完全偏离基础,但你从网络上读书的事实意味着某种不可预测性和不可靠性。因此,我不依赖于计时器,而是依靠数据的生产者(从网络读取对象)向消费者(将使用从网络读取的数据的对象)发信号通知数据。