java实现文件监控

转载自:http://www.oschina.net/code/snippet_70229_2994

java本身不能直接监听系统的文件操作事件,不过可以先编写C/C++调用操作系统的API监听文件,再通过jni调用的方式实现。限于本人的C/C++水平有限,没有用C/C++实现该接口,而且已有开源组件JNotify实现了这个功能,本文例子使用JNotify。

JNotify主页:http://jnotify.sourceforge.net/macos.html

JNotify release note for MacOS:

Because of the way Mac OS X handles file change notifications, some things may work differently.

If you are concerned about Mac support, you should be aware of the following:
Events are not guaranteed to be reported in order.

Events should be reported within two seconds of occuring.

Multiple events occuring within two seconds may be reported in any order.
File changes that are present less than two seconds may be missed.

For example, mv a b && mv b c may report only a single rename.
The code that detects renames is only aware of files being watched.

If a file outside the watched directory is moved into the directory, it will be reported as a create.

Likewise, if a file is moved out of the watched directory, it will be reported as a delete.


The Mac OS X API for file system events only reports what directory

changes have occured in, and has some latency in it. If you register a net.contentobjects.

jnotify.macosx.FSEventListener with net.contentobjects.jnotify.macosx.JNotify_macosx,

you'll receive a notifyChange event telling you when a directory has changed,

within a second of the change occuring.

The OS will merge changes together so you'll only get one notification per

directory within one second, regardless of how many changes have occured.

If too many changes occur in different subdirectories, the OS may merge

them into a single event for a common parent directory, in which case the

recurse flag will be set. See the FSEvents API for more details.


你可能感兴趣的:(java实现)