Java:监视目录的更改



我想创建一个侦听器来递归地检测目录更改(主目录及其子目录)。经过网络搜索,我找到了这个链接,它解释了包Java .nio.file中类WatchService的使用,该api完全满足了我的需求,但不幸的是它只在Java 7中可用!然后我再次返回搜索,以找到一个框架,允许相同的,并兼容java 5和java 6,但又有一个问题,因为递归是可用于Windows和我的应用程序应该使用Linux!!你能给我一个解决方案吗?另一个框架,一种方法……

我认为你做了一个很好的发现工作,找到了一个很棒的jpathwatch库。我不明白你递归的问题是什么:我在这个库文档中没有看到linux的任何限制。

但是如果由于某些原因jpathwatch不能在linux上帮助您,这不是问题:您可以自己运行du命令。参考:http://linux.about.com/library/cmd/blcmdl1_du.htm

如果我是你,我可能会做以下事情:编写一个简单的脚本,在循环中运行du。然后从java中从连续读取脚本输出并对其进行分析的单独线程中运行此脚本。

这是一种需要JVM或本机库支持的功能,例如您在Windows中找到的库。如果你在Linux的Java中找不到任何,我建议你找一个二进制Linux库(在另一个问题中),然后在它的基础上构建一个Java原生类。

我希望其他人能更好地帮助你。

要在Linux上做到这一点,您需要使用Java 7,或者使用inotify的本机库。您考虑过JNotify库吗?它似乎处理递归到子目录,包括新创建的子目录。

看看http://download.oracle.com/javase/tutorial/essential/io/notification.html

" java.nio.file包提供了一个文件更改通知API,称为Watch Service API。这个API允许您向watch服务注册一个目录(或多个目录)。注册时,您告诉服务您感兴趣的事件类型:文件创建、文件删除或文件修改。当服务检测到感兴趣的事件时,将其转发到已注册的进程。注册的进程有一个线程(或一个线程池)专门用于监视它注册的任何事件。当事件传入时,将根据需要对其进行处理。"

更新:哎呀,刚刚意识到你已经看到这个了。我没有意识到这只是在Java 7中:-(

)

最新更新