我正在编写一个基本文件监视器来检查目录中的新文件。我没有很多Java经验,所以我不知道推荐的方法是什么,但这就是我的想法:
我没有在Java中进行过任何事件调度,但谷歌搜索了一下,发现很多结果都围绕着我对此感兴趣的swing / gui组件。我也在查看Observable类,但问题是我需要从TimerTask子类通知我不能做,因为我不能扩展两个类。该项目应该足够简单,一个基本的回调(从TimerTask子类外部传递对函数的引用,以便在满足条件时从TimerTask中调用)。
你推荐什么?什么是最简单的方法?
答案 0 :(得分:2)
这应该解决目的
ActionListener al = new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
// Check Your Directory for changes
}
};
Timer t = new Timer(1000,al); // Timer(TimeInMilliSeconds, ActionListener) 1000ms = 1s
t.start();
答案 1 :(得分:2)
基本上你可以编写一个包装类,它将Timer
和TimerTask
封装到一个自我管理的容器中。
此类可以使用方法向感兴趣的各方添加/删除侦听器和触发事件。
例如;
public class FileWatcher {
private Timer timer;
public FileWatcher(File path) {
timer = new Timer("FileWather", true);
// Schedule task to start immeditaly and re-fire every second...
timer.scheduleAtFixedRate(new FileWatcherTask(), 0, 1000);
}
public void addFileWatcherListener(FileWatcherListener listener) {
//...
}
public void removeFileWatcherListener(FileWatcherListener listener) {
//...
}
protected void fireFileRemoved(File... files) {
//...
}
protected void fireFileAdded(File... files) {
//...
}
protected void fireFileChanged(File... files) {
//...
}
public class FileWatcherTask extends TimerTask {
@Override
public void run() {
// Look ma, no hands!
}
}
}
现在,显然,您需要自己定义FileWatcherListener
,但这是一个基本概念。
现在,如果您使用的是Java 7,则只需使用Watch Service API
即可