SDK1.7新增的nio WatchService能完美解决这个问题。美中不足是如果部署在window系统下会出现莫名其妙的文件夹占用异常导致子目录监听失效,linux下则完美运行。这个问题着实让人头疼。如果有童鞋找到问题根源请一起探讨。
这里简单的列出用Servlet实现的基本类供大家参考。首先是核心的实现类。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 |
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
{
// 存储监听主键和监听目录的对应
;
// 目录监听服务
// 目录对应的监听key
();
{
();
);
});
)
{
;
}
{
();
>();
);
}
{
>();
);
);
// 循环路径下所有目录填充map
{
());
// 监控目录内文件的更新、创建和删除事件
{
);
());
{
();
}
}
}
// 递归获取所有目录
{
{
);
();
{
);
}
}
}
/**
* 启动监控过程
*/
{
// 通过线程池启动一个额外的线程加载Watching过程
);
}
/**
* 关闭后的对象无法重新启动
*/
{
();
;
}
// * 监控文件系统事件
{
{
// 等待直到获得事件信号
;
{
();
{
;
}
{
();
{
;
}
);
();
();
;
)
{
);
{
path
);
);
{
();
}
)
{
);
();
}
);
(),
);
// 通知所有观察者事件变更
}
// 为监控下一个通知做准备
();
}
}
// * 通知外部各个Observer目录有新的事件更新
{
// 标注目录已经被做了更改
();
// 主动通知各个观察者目标对象状态的变更
);
}
}
|
来自CODE的代码片
DirectoryWatcher.java
Servlet的实现类:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 |
;
;
;
;
;
;
;
;
;
;
;
;
;
;
{
;
;
;
;
>();
{
;
}
{
;
}
)
{
;
,
);
}
)
{
{
;
);
();
// 建立目录监听,注册观察者为本身
);
);
();
}
SubRequestURL
]);
();
);
);
);
}
@Override
// 实现Observer观察者接口,接收通知
{
;
();
();
();
);
{
);
{
);
}
}
{
);
{
{
()
{
);
}
}
);
}
}
{
;
{
{
;
;
}
}
;
}
{
);
>();
);
}
{
{
();
{
);
}
}
);
}
{
();
());
());
());
{
()));
}
);
}
}
|
来自CODE的代码片
GetList.java
转:http://blog.csdn.net/feiying2j/article/details/50719648
附上源码下载地址:
http://download.csdn.net/detail/feiying2j/9439698