public class WatchFile {
private static final Logger logger = LoggerFactory.getLogger(WatchFile.class);
private ExecutorService executorService = Executors.newSingleThreadExecutor();
private WatchService watchService;
private ConcurrentHashMap<String,List< Callback>> listen = new ConcurrentHashMap<>();
private static WatchFile watchFile;
public static WatchFile getWatchFile() {
if (watchFile == null) {
synchronized (watchFile) {
if (watchFile == null) {
try {
watchFile.watchService = FileSystems.getDefault().newWatchService();
watchFile.executorService.execute(new Task());
} catch (IOException e) {
logger.error("WatchFile初始化错误" );
e.printStackTrace();
}
}
}
}
return watchFile;
}
public void register(String fileName, Callback object) {
try {
Paths.get(fileName).register(watchService, StandardWatchEventKinds.ENTRY_MODIFY);
List list = listen.get(fileName);
if(list == null)
list = new ArrayList()
list.add(object);
listen.put(fileName, list);
} catch (IOException e) {
logger.error("加入监听失败", fileName);
e.printStackTrace();
}
}
static class Task implements Runnable {
@Override
public void run() {
while (true) {
WatchKey watchKey = null;
try {
watchKey = watchFile.watchService.take();
watchKey.pollEvents().stream().forEach(event -> {
WatchEvent<Path> e = (WatchEvent<Path>) event;
Path path = e.context();
String fileName = path.toFile().getName();
List list = watchFile.listen.get(fileName);
for(CallBack callback :list){
callback.callback();
}
});
} catch (Exception e) {
logger.error(e.getMessage(), e);
} finally {
watchKey.reset();
}
}
}
}
监听文件修改
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 简介 今天在尝试写一个jQuer瀑布流插件,想用gulp实现js代码压缩,同时为了方便浏览器预览,要实现热刷新。 ...
- vs code 查看文件历史 vs code下载插件,重启vs code , 然后每次修改都会再根目录生成一个.h...
- 本文的原始链接在我的博客网站上 https://yohunl.com/iosjian-kong-jian-ce-...
- 本事例只为说明如何修改yml文件内容。 一、需求是怎么样修改yml文件内容? 配置文件名称为webinfo.yml...