Skip to Main Content

Java SE (Java Platform, Standard Edition)

Problems using WatchService

961299Sep 11 2012 — edited Sep 11 2012
Hello 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
Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Oct 9 2012
Added on Sep 11 2012
1 comment
1,273 views