码迷,mamicode.com
首页 > Web开发 > 详细

web项目启动时配置监听本地目录文件添加, 删除, 修改, 等操作

时间:2018-01-14 01:01:49      阅读:742      评论:0      收藏:0      [点我收藏+]

标签:pack   style   director   star   pre   col   ted   cat   text   

大致原理:  通过配置监听器在web容器启动或销毁的时候做相应的操作, 系统目录的监听器使用从jdk1.7才有的WatchService

操作步骤: 1> 自定义自己的监听器实现ServletContextListener接口中的两个方法, 一个未初始化Init方法, 一个是销毁方法Destoryed, 

  由于WatchService为阻塞型方法, 所以需要新建线程防止web容器无法启动

 1 package com.mtl.fill.listener;
 2 
 3 
 4 import com.mtl.fill.utils.ListenFile;
 5 
 6 import javax.servlet.ServletContextEvent;
 7 import javax.servlet.ServletContextListener;
 8 
 9 public class MyListener implements ServletContextListener {
10     @Override
11     public void contextInitialized(ServletContextEvent servletContextEvent) {
12         new Thread(new ListenFile()).start();
13     }
14 
15     @Override
16     public void contextDestroyed(ServletContextEvent servletContextEvent) {
17 
18     }
19 
20 }

 

  2>  写出自己要执行的操作类, 因为用到了多线程, 所以继承Thread或者实现Runable接口

 1 package com.mtl.fill.utils;
 2 
 3 import java.io.*;
 4 import java.nio.file.*;
 5 
 6 public class ListenFile implements Runnable {
 7 
 8     @Override
 9     public void run() {
10         //获取文件系统的WatchService对象
11         WatchService watchService = null;
12         try {
13             watchService = FileSystems.getDefault().newWatchService();
14             //为C:盘根路径注册监听
15             Paths.get("D://scai_client").register(watchService
16                     //监听创建操作
17                     , StandardWatchEventKinds.ENTRY_CREATE
18                     //监听删除操作
19                     ,StandardWatchEventKinds.ENTRY_DELETE
20                     //监听修改操作
21                     ,StandardWatchEventKinds.ENTRY_MODIFY);
22             //死循环一直监听
23             while(true) {
24                 //一直等待,直到获取下一个文件变化事件
25                 WatchKey key = watchService.take();
26                 //遍历监控获得的事件列表
27                 for (WatchEvent<?> event : key.pollEvents()) {
28                     //event.context()返回触发事件的文件或目录
29                     System.out.println(event.context() + "发生了" + event.kind()+ "事件");
30                 }
31                 //重新设置WatchKey
32                 boolean valid = key.reset();
33                 //如果设置失败则退出监听
34                 if (!valid) {
35                     break;
36                 }
37             }
38         } catch (IOException e) {
39             e.printStackTrace();
40         } catch (InterruptedException e) {
41             e.printStackTrace();
42         }
43     }
44 }

,这里directory监听引用了某位博主的博客, 但是找不到了, 所以抱歉无法报明出处了!

 

web项目启动时配置监听本地目录文件添加, 删除, 修改, 等操作

标签:pack   style   director   star   pre   col   ted   cat   text   

原文地址:https://www.cnblogs.com/DarkStreet/p/8280808.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!