/**
* 监控指定文件目录
*
* dirPath 指定目录路径
**/
public boolean watchDirectory(String dirPath) {
// 判断要监控的目录是否存在
if (!(new File(dirPath).exists())) {
log.error(MessageFormat.format("目录{0}不存在!", dirPath));
return false;
}
// 注册要监控的文件夹
Path watchDirectory = Paths.get(new File(dirPath).getPath());
try (WatchService watchService = FileSystems.getDefault().newWatchService()) {
watchDirectory.register(watchService,
// 指定要监控的文件操作类型,创建/修改/删除
StandardWatchEventKinds.ENTRY_CREATE);
// 死循环执行监控
while (true) {
// 获取文件操作对象
WatchKey watchKey = watchService.take();
// 针对不同的文件操作类型进行处理
for (WatchEvent event : watchKey.pollEvents()) {
WatchEvent.Kind eventKind = event.kind();
if (eventKind == StandardWatchEventKinds.OVERFLOW) {
continue;
}
// 获取发生改变的文件名
String fileName = event.context().toString();
// 当文件创建执行
if (eventKind == StandardWatchEventKinds.ENTRY_CREATE) {
// TODO: 自定义处理动作
}
}
// 每次执行完后重置
boolean isKeyValid = watchKey.reset();
if (!isKeyValid) {
break;
}
}
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
return true;
}