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();
}
}
}