我正在寻找一个可以通知我文件系统更改的Java库。
我找到了一些免费的库,但它们都使用强力检测,即定期轮询。而其他的一直都是商业性的。
我正在寻找的是一个使用操作系统中的文件监视器功能的库,即 适用于Win32的FindFirstChangeNotification,适用于Linux的FAM以及其他操作系统上提供的任何内容。我不介意使用暴力作为后备,但对于Windows和Linux,它应该使用可用的操作系统功能。
答案 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()),确实使用底层平台的通知工具,如果有的话。
这两个库还提供了一个有用的抽象层,用于与各种其他传输和系统集成,因此您的主应用程序代码不依赖于从文件系统接收的输入。