我想创建一个侦听器来递归检测目录更改(主目录及其子目录)。在网络搜索之后,我发现这个link解释了从包java.nio.file中使用的类WatchService,它完全符合我的需要,但不幸的是它只在Java 7中可用! 然后我再次返回搜索,以便找到允许相同的framework并且兼容java 5和java 6但是再次出现问题,因为递归可用于Windows,我的应用程序应该使用Linux! 你能为我提供一个解决方案:另一个框架,一种方法......
答案 0 :(得分:2)
我认为你做了一个很好的发现工作,并找到了一个很棒的图书馆jpathwatch。我不明白你的递归问题是什么:我在这个库文档中没有看到对linux的任何限制。
但是如果由于某些原因jpathwatch无法帮助你在linux上,那不是问题:你可以自己运行du命令。请参阅此参考:http://linux.about.com/library/cmd/blcmdl1_du.htm
如果我是你,我可能会做以下事情:编写循环运行du的简单脚本。然后从单独的线程中运行此脚本,该线程连续读取脚本的输出并进行分析。
答案 1 :(得分:1)
这是一种需要支持JVM或本机库的功能,例如您在Windows中找到的库。如果你在Linux上找不到任何 Java ,我建议你找一个二进制Linux库(在另一个问题中),然后再建一个Java本地类。
我希望其他人能更好地帮助你。
答案 2 :(得分:1)
要在Linux上执行此操作,您需要使用Java 7或使用inotify
的本机库。你考虑过JNotify library了吗?看起来它处理递归到子目录,包括新创建的。
答案 3 :(得分:0)
查看http://download.oracle.com/javase/tutorial/essential/io/notification.html
“java.nio.file包提供了一个文件更改通知API,称为Watch Service API。这个API允许您使用watch服务注册一个目录(。或多个目录)。注册时,告诉服务哪些类型您感兴趣的事件:文件创建,文件删除或文件修改。当服务检测到感兴趣的事件时,它将被转发到注册的进程。注册的进程有一个专用于观看的线程(或线程池)对于它已经注册的任何事件。当一个事件进入时,它将根据需要进行处理。“
更新:哎呀,刚才意识到你已经看到了这个。我没有意识到这只是在Java 7中: - (