我有一个监视目录的服务,用于监听
我需要该服务监视所有更改,而不退出循环。但我还需要启动其他逻辑。
如何将这些方法重构为一个
以下是代码。
ENTRY_DELETE
、ENTRY_CREATE
和 ENTRY_MODIFY
事件,并根据事件执行逻辑。我需要该服务监视所有更改,而不退出循环。但我还需要启动其他逻辑。
如何将这些方法重构为一个
Runnable
来实现这一点?以下是代码。
public static void main(String[] args) {
System.out.println("Started watching");
FileServices fileServices = new FileServicesImpl();
fileServices.setSrcDir(fileServices.getValue("srcdir","properties/abc.properties"));
fileServices.setDestDir(fileServices.getValue("destdir","properties/abc.properties"));
System.out.println(fileServices.getSrcDir());
System.out.println(fileServices.getDestDir());
Map<String,WatchEvent> files = new HashMap<>();
MappingConsole mappingConsole = new MappingConsole();
for(;;){
files = fileServices.getEventMap();
for(String f : files.keySet()){
System.out.println("Size of files: "+files.size());
if (files.get(f).kind() == ENTRY_CREATE || files.get(f).kind() == ENTRY_MODIFY) {
System.out.println("Processing: " +f);
mappingConsole.map940(fileServices.getSrcDir(),f,fileServices.getDestDir());
System.out.println("Processed: " +f);
}
}
}
}
来自FileServicesImpl:
@Override
public void monitorSrcDir(String srcDir){
for(;;){
try {
WatchService watchService = FileSystems.getDefault().newWatchService();
Path myDir = Paths.get(srcDir);
WatchService watcher = myDir.getFileSystem().newWatchService();
myDir.register(watcher, ENTRY_CREATE,ENTRY_DELETE, ENTRY_MODIFY);
WatchKey watchKey = watcher.take();
List<WatchEvent<?>> events = watchKey.pollEvents();
for (WatchEvent event : events) {
if (event.kind() == ENTRY_CREATE) {
System.out.println("Create: " + event.context().toString());
getEventMap().put(event.context().toString(), event);
}
if (event.kind() == ENTRY_DELETE) {
System.out.println("Delete: " + event.context().toString());
getEventMap().put(event.context().toString(), event);
}
if (event.kind() == ENTRY_MODIFY) {
System.out.println("Modify: " + event.context().toString());
getEventMap().put(event.context().toString(), event);
}
}
watchKey.reset();
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}