JNotify监听文件变化
2015-03-18 16:59
155 查看
其实还是全文检索的需求。对某个目录下的文档都做了全文检索。自然会关注这些文档的变化。
最开始的方案是轮询。每隔一段时间就轮询一次。当做全文检索的文件比较多的时候,这种
轮询需要花费很多的时间。而且,每个文档都要检查是否有更新,就意味着每次都要查数据库,
对数据库的压力也有一些。总之感觉不爽。
于是想着替代方案,最好就是能监听文件的变化。只有文件发生变化的时候,才去更新数据库,
并且更新全文的索引。于是用google搜了一下。发现有不少实现方式还是我使用的那种,采用
轮询的方式。而且大部分都是将关注的文件列表放在内存当中。这对于监听量比较大的情况,就
不适合了。
还搜到两种实现,一种是 JDK7 里面的 NIO 的WatchService,这个也可以实现监听。只要文件
发生变化,就会产生相应的事件。这个应该是一个不错的解决方案。不过JDK7也还没正式发布,
想了想还是算了。另一种就是 jnotify 。其实还有一个类似的商业产品 JxFileWatcher ,不过因为
要钱又不开源,我就没去碰。
jnotify 使用起来非常简单,
Java代码
int watchID =JNotify.addWatch(path, mask, watchSubtree, new Listener());
就可以添加对一个目录的监听,还可以选择是否要监听子目录。mask和listener也非常简单,
例子见: http://jnotify.sourceforge.net/sample.html
比较有意思的是它有个
fileRenamed
事件。如果只是改名,就会有这个事件,而不是一个删除和
一个新建事件。另外要注意的一点就是它利用了操作系统的底层实现。因此,在windows下需要把
dll文件放在 java.library.path 目录下。非常简单,而且效果很好,文件被改动之后,实时的就产生
这样的一个事件,非常不错,比轮询方便多了。
JDK7正式发布以后,应该就可以用JDK7的实现了。
最开始的方案是轮询。每隔一段时间就轮询一次。当做全文检索的文件比较多的时候,这种
轮询需要花费很多的时间。而且,每个文档都要检查是否有更新,就意味着每次都要查数据库,
对数据库的压力也有一些。总之感觉不爽。
于是想着替代方案,最好就是能监听文件的变化。只有文件发生变化的时候,才去更新数据库,
并且更新全文的索引。于是用google搜了一下。发现有不少实现方式还是我使用的那种,采用
轮询的方式。而且大部分都是将关注的文件列表放在内存当中。这对于监听量比较大的情况,就
不适合了。
还搜到两种实现,一种是 JDK7 里面的 NIO 的WatchService,这个也可以实现监听。只要文件
发生变化,就会产生相应的事件。这个应该是一个不错的解决方案。不过JDK7也还没正式发布,
想了想还是算了。另一种就是 jnotify 。其实还有一个类似的商业产品 JxFileWatcher ,不过因为
要钱又不开源,我就没去碰。
jnotify 使用起来非常简单,
Java代码
int watchID =JNotify.addWatch(path, mask, watchSubtree, new Listener());
就可以添加对一个目录的监听,还可以选择是否要监听子目录。mask和listener也非常简单,
例子见: http://jnotify.sourceforge.net/sample.html
比较有意思的是它有个
fileRenamed
事件。如果只是改名,就会有这个事件,而不是一个删除和
一个新建事件。另外要注意的一点就是它利用了操作系统的底层实现。因此,在windows下需要把
dll文件放在 java.library.path 目录下。非常简单,而且效果很好,文件被改动之后,实时的就产生
这样的一个事件,非常不错,比轮询方便多了。
JDK7正式发布以后,应该就可以用JDK7的实现了。
相关文章推荐
- 监听文件变化,并且在主线程呈现结果
- Android监听SD卡文件变化
- Flume实战监听文件夹内文件变化
- Flume监听文件夹中的文件变化,并把文件下沉到hdfs
- 模拟使用Flume监听日志变化,并且把增量的日志文件写入到hdfs中
- java监听硬盘的创建、修改删除文件的demo(需要jnotify-lib-0.93.rar )
- Spark Streaming之:Flume监控目录下文件内容变化,然后Spark Streaming实时监听Flume,然后从其上拉取数据,并计算出结果
- iOS监控/监测/监听文件/文件夹的变化 检测文件变化
- gulp监听文件变化,并拷贝到指定目录(转)---参考记录
- 模拟使用Flume监听日志变化_并且把增量的日志文件写入到hdfs中
- gulp监听文件变化,并拷贝到指定目录
- [Windows]_[初级]_[监听指定目录文件夹中文件的变化]
- WatchService API实现监听文件系统中的文件变化(包括各级子目录)
- gulp监听文件变化,并拷贝到指定目录
- node.js 监听文件变化并打印
- Android Service监听SD卡某目录变化,并获取文件Path
- jdk7 新特性 监听文件目录变化
- 用inotify监听文件或目录变化
- jdk7监听文件变化感知
- Flume监听文件夹中的文件变化_并把文件下沉到hdfs