监听文件变化的 JNotify

其实还是全文检索的需求。对某个目录下的文档都做了全文检索。自然会关注这些文档的变化。

最开始的方案是轮询。每隔一段时间就轮询一次。当做全文检索的文件比较多的时候,这种

轮询需要花费很多的时间。而且,每个文档都要检查是否有更新,就意味着每次都要查数据库,

对数据库的压力也有一些。总之感觉不爽。

 

于是想着替代方案,最好就是能监听文件的变化。只有文件发生变化的时候,才去更新数据库,

并且更新全文的索引。于是用google搜了一下。发现有不少实现方式还是我使用的那种,采用

轮询的方式。而且大部分都是将关注的文件列表放在内存当中。这对于监听量比较大的情况,就

不适合了。

 

还搜到两种实现,一种是 JDK7 里面的 NIO 的WatchService,这个也可以实现监听。只要文件

发生变化,就会产生相应的事件。这个应该是一个不错的解决方案。不过JDK7也还没正式发布,

想了想还是算了。另一种就是 jnotify 。其实还有一个类似的商业产品 JxFileWatcher ,不过因为

要钱又不开源,我就没去碰。

 

jnotify 使用起来非常简单,

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的实现了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值