Problems using WatchService
961299Sep 11 2012 — edited Sep 11 2012Hello everyone,
I've got a few problems using WatchService.class:
public void watch() throws IOException, InterruptedException{
WatchService watchService = FileSystems.getDefault().newWatchService();
Paths.get(desktopDirPath).register(watchService,
StandardWatchEventKinds.ENTRY_CREATE,
StandardWatchEventKinds.ENTRY_DELETE,
StandardWatchEventKinds.ENTRY_MODIFY);
while(true){
WatchKey key = watchService.take();
for(WatchEvent<?> event : key.pollEvents()){
WatchEvent.Kind<?> kind = event.kind();
switch(kind.name()){
case KIND_ENTRY_CREATE:
// ... do something
break;
// ... more cases ...
default:
break;
}
}
key.reset();
}
}
So, there is my code snippet. First things first:
1.) Is a new thread started automatically when calling watchService's call method? I've been wondering because the method throws an InterruptedException.
2.) I've got problems dealing with the watch events. For example let's imagine we want to move or delete one or more files when created in a specified directory. It seems to work for one file or even a few more. But it fails to handle new files which are created rapidly for example by a service in the watched directory. It seems that the occurring events aren't recognized fast enough, but that's just my theory. I've tried logging the paths to the files in a hashtable and deleting them asynchronous in another thread but it seems that I'll have to deal with concurrency then, won't I?
Best regards!
Edited by: 958296 on 11.09.2012 01:28