当前位置: 代码迷 >> J2SE >> jNotify的bug?该如何处理
  详细解决方案

jNotify的bug?该如何处理

热度:60   发布时间:2016-04-23 19:40:18.0
jNotify的bug?
小弟最近在项目里用jNotify来监控某个文件夹的变化。
发现如果第一次监控一个实际没有的目录,它不会报错,
再添加一个新监控,还是一个实际没有的目录,就报错了,报一个jnotifyexception的错误,如下:
net.contentobjects.jnotify.win32.JNotifyException_win32: Error 2 : 系统找不到指定的文件。 : D:\xxx

请问这是jnotify的bug吗?
我是一个人吗?
能有解决的办法吗?

求大神指正

代码:

public class Test {

public static void main(String[] args) {

try {
int a = JNotify.addWatch("D:\\aaa", 
 JNotify.FILE_ANY, 
 true, 
 null);
System.out.println(a);

JNotify.removeWatch(a);

a = JNotify.addWatch("D:\\xxx", 
 JNotify.FILE_ANY, 
 true, 
 null);

System.out.println(a);
} catch (JNotifyException e) {
e.printStackTrace();
}
}
}


运行结果:
0
net.contentobjects.jnotify.win32.JNotifyException_win32: Error 2 : 系统找不到指定的文件。 : D:\xxx
at net.contentobjects.jnotify.win32.JNotify_win32.addWatch(Unknown Source)
at net.contentobjects.jnotify.win32.JNotifyAdapterWin32.addWatch(Unknown Source)
at net.contentobjects.jnotify.JNotify.addWatch(Unknown Source)
at test.jnotify.Test.main(Test.java:17)

------解决思路----------------------

监视文件变化

WatchService是Java 7中新添加的一个特性,用来监视一某个路径下的文件或者目录是否发生了变化。

final Path path = Paths.get(".");
final WatchService watchService = path.getFileSystem().newWatchService();

path.register(watchService, StandardWatchEventKinds.ENTRY_MODIFY);

System.out.println("Report any file changed within next 1 minutes...");
注册了需要监视的目录后,需要使用WatchKey来得到一段时间内的,该目录的变化情况:

final WatchKey watchKey = watchService.poll(1, TimeUnit.MINUTES);
if(watchKey != null) {
    watchKey.pollEvents().stream().forEach(event ->
    System.out.println(event.context()));
}
这里使用了Java 8中的内部遍历器forEach来完成对于事件的遍历。这也算是一个Java 7和Java 8特性的联合使用吧。
  相关解决方案