vaniglia 源码学习(四)

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

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

vaniglia 源码学习(四)

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

        }

    }

 

 

你可能感兴趣的:(学习)