WatchService API实现监听文件系统中的文件变化(包括各级子目录)
来源:互联网 发布:淘宝的内裤哪个牌子好 编辑:程序博客网 时间:2024/05/16 05:32
最近导师下发一个任务,要求实现监听文件系统中的文件变化,并实时向管理员报告,以便管理员及时做出相应的处理,以免造成不必要的损失。
网上搜索的了一下,发现使用WatchService来实现的比较多,WatchService是Java SE7增加的服务,位于java.nio.file包中。网上的朋友都只是实现了对某个指定目录的监视,不包括对其各级子目录的监视,这不符合我的要求,于是经过整理修改,实现了对目录及其各级子目录的监视,代码如下:
注:这里是对整个E盘进行监视,如果E盘的文件及其子目录很多的话,速度可能会比较慢。
【补充】:经过一段时间的项目经验,知道监控的方式主要分为两种:扫描式和事件驱动式,WatchService是采用扫描式的,所以比较慢。如果追求效率的话可以考虑使用apache的commons-io里面的FileAlteration,她是采用事件驱动式的,效率比较高。
下面是WatchService的代码:
package wds;import java.io.*;import java.nio.file.*;import java.nio.file.attribute.*;import java.nio.channels.*;import java.util.ArrayList;import java.util.LinkedList;import java.util.List;public class WatchFile{ public static void main(String[] args) throws Exception{ String filePath = ("E:"); // 获取文件系统的WatchService对象 WatchService watchService = FileSystems.getDefault().newWatchService(); Paths.get(filePath).register(watchService , StandardWatchEventKinds.ENTRY_CREATE , StandardWatchEventKinds.ENTRY_MODIFY , StandardWatchEventKinds.ENTRY_DELETE); 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) { // 获取下一个文件改动事件 WatchKey key = watchService.take(); for (WatchEvent<?> event : key.pollEvents()) { System.out.println(event.context() +" --> " + event.kind()); } // 重设WatchKey boolean valid = key.reset(); // 如果重设失败,退出监听 if (!valid) { break; } } }}
0 0
- WatchService API实现监听文件系统中的文件变化(包括各级子目录)
- 使用WatchService实现文件变更监听
- WatchService监控文件变化
- java7 WatchService监听文件
- WatchService文件监听
- Java7 WatchService 监控文件变化
- [疯狂Java]NIO.2:WatchService、WatchKey(监控文件变化)
- NIO.2:WatchService、WatchKey(监控文件变化)
- 使用commons-io-2.0 API来实现监听文件变化
- 文件变化监视 java.nio.file.WatchService
- 缓存文件变化 && WatchService监控文件变化分析
- 获取文件夹中的所有文件,包括子目录中的
- PHP获取目录下的文件(包括子目录中的文件)
- java程序 一次改变指定目录下所有文件编码(包括子目录中的文件)
- 删除所有svn文件(一个目录和其各级子目录下的) 两种方法
- vb实现获取指定目录内的所有文件(包括子目录)
- 遍历目录下所有各级子目录文件的全路径
- 一段可以在UNIX下,读取当前目录下所有文件(包括子目录中的文件)的文件名的程序
- Android音量设置流程干货版
- C语言合法标识符 HDU2024
- 百度加大整治莆田系民营医院力度
- AsyncTask异步操作
- Trace32相关
- WatchService API实现监听文件系统中的文件变化(包括各级子目录)
- 关于String在OC中的一些操作(长沙戴维营)
- memset是如何赋值的以及一些遐想
- 对C++中虚基类的认识
- Android 单元测试框架
- 微软2016校园招聘在线笔试题目-第一题 Magic Box
- 关于高效大规模并发的epoll(nginx的优势)
- Unique Path II--LeetCode
- 学习SpringMVC笔记(全)