监控文件夹状态的JAVA插件

JNotify,一个支持动态监控文件和文件夹(支持级联监控)的架包。在linux系统中,调用的是linux底层的inotify服务,只是添加了对子文件夹级联监控的功能。在windows中,需要添加附件的dll文件,因为windows默认没有该服务,这是大拿们自己开发的一个功能。

使用很简单,以我的ubuntu系统为例:
1,将jnotify包引入到工程中。
2,将jnotify依赖的so文件加入到java.library.path路径中。这个变量可能会有多个位置,随便将jnotify压缩包中附带的libjnotify.so文件加入到其中的任何一个路径中即可。如果不知道这个变量的值,可以使用System.getProperty("java.library.path")查看。当然,如果不想这么麻烦,可以在启动程序时指定JVM的参数


Java代码 
1.-Djava.library.path=你的位置 
,这样和上面将so文件加入系统路径中是一样的效果。

然后,写个测试类就可以看见效果了。
我这里没有自己写,只是简单的拷贝了一下JNotify官网的测试代码。



Java代码 
1.
public class JnotifyTest {  
2.    public static void main(String[] args) {  
3.        try {  
4.            new JnotifyTest().sample();  
5.        } catch (Exception e) {  
6.            e.printStackTrace();  
7.        }  
8.        // System.out.println(System.getProperty("java.library.path"));  
9.    }  
10.  
11.    public void sample() throws Exception {  
12.        // path to watch  
13.        String path = System.getProperty("user.home");  
14.  
15.        // watch mask, specify events you care about,  
16.        // or JNotify.FILE_ANY for all events.  
17.        int mask = JNotify.FILE_CREATED | JNotify.FILE_DELETED  
18.                | JNotify.FILE_MODIFIED | JNotify.FILE_RENAMED;  
19.  
20.        // watch subtree?  
21.        boolean watchSubtree = true;  
22.  
23.        // add actual watch  
24.        int watchID = JNotify  
25.                .addWatch(path, mask, watchSubtree, new Listener());  
26.  
27.        // sleep a little, the application will exit if you  
28.        // don't (watching is asynchronous), depending on your  
29.        // application, this may not be required  
30.        Thread.sleep(1000000);  
31.  
32.        // to remove watch the watch  
33.        boolean res = JNotify.removeWatch(watchID);  
34.        if (!res) {  
35.            // invalid watch ID specified.  
36.        }  
37.    }  
38.  

39.        //可以在下面的监控方法中添加自己的代码。比如在fileModified中添加重新加载配置文件的代码 
40.   
class Listener implements JNotifyListener {  
41.        public void fileRenamed(int wd, String rootPath, String oldName,  
42.                String newName) {  
43.            print("renamed " + rootPath + " : " + oldName + " -> " + newName);  
44.        }  
45.  
46.        public void fileModified(int wd, String rootPath, String name) {  
47.            print("modified " + rootPath + " : " + name);  
48.        }  
49.  
50.        public void fileDeleted(int wd, String rootPath, String name) {  
51.            print("deleted " + rootPath + " : " + name);  
52.        }  
53.  
54.        public void fileCreated(int wd, String rootPath, String name) {  
55.            print("created " + rootPath + " : " + name);  
56.        }  
57.  
58.        void print(String msg) {  
59.            System.err.println(msg);  
60.        }  
61.  
62.    }  
63.}  


在实际的使用过程中,如果是web工程,我的习惯是添加一个listener监听器,当监听器初始化时,添加对指定文件或文件夹的监控。这样我们就不必为每次修改了配置文件都需要重启工程而苦恼了。如果是Java工程,就是需要的地方添加监控吧。



转自:http://lichuanbao.iteye.com/blog/1532951

猜你喜欢

转载自zhangxpower.iteye.com/blog/1971905
今日推荐