vaniglia 源码学习(四)
vaniglia中的directory poller(线程)用于检查某目录下的文件情况,如果有新文件增加则触发相应的EventListener。
vaniglia对Evnet的定义如下,这种分级的Event定义在之前项目的前端设计中也遇见过,非常值得借鉴,清晰而且可扩展性好。
在源码中主要的业务类是public class DirectoryPoller extends Thread,主要有以下几个方法:
- 增加事件监听器,该监听器继承上面的FileEventListner接口,被addEventListener添加到一个list属性中;
- 主要业务逻辑方法runCycle,被Thread的run方法调用。该方法会遍历路径下的文件,如发生MOVE操作
//略
autoMoveDir.mkdirs(); if (!orig.renameTo(dest)) { //略 } else { notifyFileMoved(new FileMovedEvent(this, orig, dest));//触发事件 movedFiles[j] = dest.getName(); if (j + 1 == files.length) dir = autoMoveDir; if (verbose) System.out.println("[Automove] Moved " + orig.getAbsolutePath() + " to " + autoMoveDir.getAbsolut ePath() + File.separator); }
private void notifyFileMoved(FileMovedEvent event) { for (int i = 0; i < eventListenerList.size(); i++) { ((FileEventListener) eventListenerList.get(i)).fileMoved(event); } }