2012-10-15 78 views
2

我正在尝试使用Java 7的WatchService来监视文件夹。我希望它监视正在添加到WatchService注册路径的任何文件或文件夹。使用Java WatchService监视文件夹内的文件夹

如果我将一个文件夹添加到注册路径中,它会正确检测它为ENTRY_CREATE并返回watchEvent.context()中文件夹的名称。但是,如果我将文件夹添加到该文件夹​​中而不是再次检测到它,但watchEvent.context()会返回相同的文件夹和ENTRY_MODIFY,因为该文件夹已通过添加其他文件夹进行修改。

所以我理解这一点,但不知道我是否应该在结构内注册的每个文件夹,或只是注册的顶层文件夹和收听或创建和修改

+0

http://docs.oracle.com/javase/tutorial/essential/io/examples/WatchDir.java应该是有用的,它显示了如何通过步行FileTree递归地添加WatchKeys –

回答

2

没有为跨平台的直接支持。对于Windows,有一个ExtendedWatchEventModifier.FILE_TREE可以递归地观看一个目录。但是,在Mac或Linux上没有相应的功能。另外请注意,ExtendedWatchEventModifier是扩展名,不属于标准定义。

你必须听取CREATE和DELETE。当创建(删除)的对象是一个目录时,您需要在子目录中添加(删除)新的监视。

+0

谢谢,你的意思是这个http:///jpathwatch.sourceforge.net/。看起来它现在可能支持OSX,但似乎我更愿意只注册每个文件夹 –

+0

我相信这是很多WatchService概念的起源。但它也是OpenJDK7的一部分:http://www.docjar.com/html/api/com/sun/nio/file/ExtendedWatchEventModifier.java.html 请注意,这是一个com.sun。*类。 –