使用很简单,以我的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