WatchService 实现监听文件变化(包括各级子目录)

public static void siteListener(String filePath) throws InterruptedException,IOException{
         // 获取文件系统的WatchService对象
       WatchService watchService = FileSystems.getDefault().newWatchService();
       String parentPath = filePath.substring(0,filePath.lastIndexOf(File.separator));
       Paths.get(parentPath).register(watchService, StandardWatchEventKinds.ENTRY_CREATE,StandardWatchEventKinds.ENTRY_MODIFY,StandardWatchEventKinds.ENTRY_DELETE);  
       
       System.out.println("------------------------------"+watchService.hashCode());
       
       File file = new File(filePath);
       LinkedList<File> fList = new LinkedList<File>();
       fList.addLast(file);
       while (fList.size() > 0 ) {
           File f = fList.removeFirst();
           if(f.listFiles() == null)
               continue;
           for(File file2 : f.listFiles()){
                   if (file2.isDirectory()){//下一级目录
                   fList.addLast(file2);
                   //依次注册子目录
                   Paths.get(file2.getAbsolutePath()).register(watchService 
                           , StandardWatchEventKinds.ENTRY_CREATE
                           , StandardWatchEventKinds.ENTRY_MODIFY
                           , StandardWatchEventKinds.ENTRY_DELETE);
               }
           }
       }
 
       while(true)
       {
           System.out.println("siteListener开始监听");
           // 获取下一个文件改动事件
           WatchKey key = watchService.take();
           System.out.println("key ======"  + key);
           for (WatchEvent<?> event : key.pollEvents()) 
           {
               System.out.println(event.context() +" --> " + event.kind());

               
               if(event.context().toString().equals("dasda.txt")){
                  
               }
               
               
  
           }
           // 重设WatchKey
           boolean valid = key.reset();
           // 如果重设失败,退出监听
           if (!valid) 
           {
               break;
           }
       }
    }
    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值