在平时的开发过程中,会有很多场景需要实时监听文件的变化,如下:
1、通过实时监控 mysql 的 binlog 日志实现数据同步
2、修改配置文件后,希望系统可以实时感知
3、应用系统将日志写入文件中,日志监控系统可以实时抓取日志,分析日志内容并进行报警
4、类似 ide 工具,可以实时感知管理的工程下的文件变更
在 Java 语言中,从 JDK7 开始,新增了java.nio.file.WatchService
类,用来实时监控文件的变化。
1.示例代码
FileWatchedService 类:
package org.learn.file;
import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardWatchEventKinds;
import java.nio.file.WatchEvent;
import java.nio.file.WatchKey;
import java.nio.file.WatchService;
import java.util.List;
/**
* 实时监控文件的变化
*
* @author zhibo
* @date 2019-07-30 20:37
*/
public class FileWatchedService {
private WatchService watchService;
private FileWatchedListener listener;
/**
*
* @param path 要监听的目录,注意该 Path 只能是目录,否则会报错 java.nio.file.NotDirectoryException: /Users/zhibo/logs/a.log
* @param listener 自定义的 listener,用来处理监听到