JavaNioWatchService
我有一个Java项目,我们需要监听一些路径来检测是否有任何新的XML文件,如果是真的,我们需要通过一些其他规则来处理它 WatchService在发现是否有新文件需要处理方面做得很好,但我无法管理它以便读取该文件,我只是从事件中返回文件名 有没有办法通过WatchService实现这一点?如果没有,还有什么建议要提出JavaNioWatchService,java,xml,nio,watchservice,Java,Xml,Nio,Watchservice,我有一个Java项目,我们需要监听一些路径来检测是否有任何新的XML文件,如果是真的,我们需要通过一些其他规则来处理它 WatchService在发现是否有新文件需要处理方面做得很好,但我无法管理它以便读取该文件,我只是从事件中返回文件名 有没有办法通过WatchService实现这一点?如果没有,还有什么建议要提出 谢谢。当然,您可以轻松做到: 创建监视服务: WatchService watchService = null; try { watchService = File
谢谢。当然,您可以轻松做到:
WatchService watchService = null;
try {
watchService = FileSystems.getDefault().newWatchService();
Path path = get(pathToSee);
path.register(watchService, new WatchEvent.Kind[]{ENTRY_MODIFY, ENTRY_CREATE}, SensitivityWatchEventModifier.HIGH);
watchEvent(watchService, path);
log.info("Watch Service has ben created!");
} catch (IOException e) {
log.error("Exception has ben throw when the service have tried to createWatchService()", e);
}
SensitivityWatchEventModifier.HIGH
增加灵敏度
WatchKey key;
while (true) {
try {
if ((key = watchService.take()) == null) break;
for (WatchEvent<?> event : key.pollEvents()) {
log.info("Event kind:" + event.kind()
+ ". File affected: " + event.context() + ".");
String fileName = event.context().toString();
File directory = path.toFile();
yourService.readContent(directory, fileName);
}
key.reset();
} catch (InterruptedException | IOException e) {
log.error("InterruptedException when try watchEvent()" + e);
}
}
如果你有文件名,你就不能打开文件吗?如果“只是文件名”,你指的是结果,那么只需根据目录解析它就可以得到完整的路径。
try (BufferedReader br = new BufferedReader(new FileReader(directory + "/" + fileName))) {
String strLine;
while ((strLine = br.readLine()) != null) {
}
}
}
}
public void getAll() throws Exception {
FileAlterationObserver observer = new FileAlterationObserver(pathToSee);
observer.addListener(new FileAlterationListenerAdaptor() {
@SneakyThrows
@Override
public void onFileCreate(File file) {
}
@Override
public void onFileDelete(File file) {
}
});
}