vaniglia 源码学习(四)

vaniglia中的directory poller(线程)用于检查某目录下的文件情况,如果有新文件增加则触发相应的EventListener。

vaniglia对Evnet的定义如下,这种分级的Event定义在之前项目的前端设计中也遇见过,非常值得借鉴,清晰而且可扩展性好。

vaniglia 源码学习(四)_第1张图片

在源码中主要的业务类是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);
        }
    }

 

 

你可能感兴趣的:(java)