是否有一个复杂的Java文件系统监视器,它是免费软件还是开源软件?

时间:2009-07-08 06:31:22

标签: java file-monitoring

我正在寻找一个可以通知我文件系统更改的Java库。

我找到了一些免费的库,但它们都使用强力检测,即定期轮询。而其他的一直都是商业性的。

我正在寻找的是一个使用操作系统中的文件监视器功能的库,即 适用于Win32的FindFirstChangeNotification,适用于Linux的FAM以及其他操作系统上提供的任何内容。我不介意使用暴力作为后备,但对于Windows和Linux,它应该使用可用的操作系统功能。

5 个答案:

答案 0 :(得分:25)

JNotify似乎可以满足您的需求。

轮询文件系统(例如,更新时间更改的目录)不会对系统造成重大负担,也不应打折扣。像Tomcat等应用程序使用它来管理热部署,几乎没有问题。

现在没有太多帮助,但即将推出的Java 7正好有WatchService

答案 1 :(得分:7)

如果您愿意在Java的前沿工作,请查看 Java 7 中的JSR 203: More New I/O APIs又名nio2。

  

一个新的文件系统接口   支持批量访问文件   属性,更改通知,   转到特定于文件系统的API,   和服务提供商接口   可插拔文件系统实现;

答案 2 :(得分:6)

jpathwatch是另一种选择。它实现了Java 7的目录监控API,因此如果需要,可以轻松移植到Java 7。

答案 3 :(得分:4)

为什么它必须是Java?

将要使用特定于平台的API的库必须具有本机代码,因此本质上该库将围绕本机代码包装,这使得不同API的使用变得透明。

我建议如果您没有找到自己的库,那么您将不得不在调用它时使用暴力,或者使用JNI为每个平台调用本机API。

答案 4 :(得分:0)

目前使用轮询的另外两个选项:

但是,由于这两个项目都有大型活动社区,因此将来可能会更新它们以支持Java 7 WatchService(FileSystem.newWatchService()),确实使用底层平台的通知工具,如果有的话。

这两个库还提供了一个有用的抽象层,用于与各种其他传输和系统集成,因此您的主应用程序代码不依赖于从文件系统接收的输入。