基本上,您可以编写一个包装类,将Timer
and封装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