package org.jeecg.modules.dnc.listener;
|
import org.apache.commons.io.monitor.FileAlterationMonitor;
|
import org.apache.commons.io.monitor.FileAlterationObserver;
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
|
import java.io.File;
|
import java.util.List;
|
|
public class MultiPathMonitor {
|
private static final Logger log = LoggerFactory.getLogger(MultiPathMonitor.class);
|
|
private final List<String> paths;
|
private final FileListener listener;
|
private final long interval;
|
private final FileAlterationMonitor monitor;
|
|
public MultiPathMonitor(List<String> paths, long interval, FileListener listener) {
|
// 验证目录
|
DirectoryValidator.validatePaths(paths);
|
this.paths = paths;
|
this.interval = interval;
|
this.listener = listener;
|
this.monitor = new FileAlterationMonitor(interval);
|
}
|
|
public void start() {
|
// 为每个路径创建独立的观察者
|
paths.forEach(path -> {
|
FileAlterationObserver observer = new FileAlterationObserver(new File(path));
|
observer.addListener(listener);
|
monitor.addObserver(observer);
|
log.info("开始监控目录: {}", path);
|
});
|
|
try {
|
monitor.start();
|
log.info("文件监控器已启动,监控目录数量: {}", paths.size());
|
} catch (Exception e) {
|
log.error("监控启动失败", e);
|
throw new RuntimeException("监控启动失败", e);
|
}
|
}
|
|
public void stop() throws Exception {
|
if (monitor != null) {
|
monitor.stop();
|
log.info("文件监控器已停止");
|
}
|
}
|
|
// 动态添加新目录
|
public void addMonitorPath(String newPath) {
|
File dir = new File(newPath);
|
if (!dir.exists() || !dir.isDirectory() || !dir.canRead()) {
|
log.error("无法添加无效目录: {}", newPath);
|
return;
|
}
|
|
FileAlterationObserver newObserver = new FileAlterationObserver(dir);
|
newObserver.addListener(listener);
|
monitor.addObserver(newObserver);
|
paths.add(newPath);
|
log.info("新增监控目录: {}", newPath);
|
}
|
}
|