public void processEvents ( ) { if ( ! enable ) return ; for ( ; ; ) { // wait for key to be signalled WatchKey key ; try { key = watcher . take ( ) ; } catch ( InterruptedException x ) { return ; } Path dir = keys . get ( key ) ; if ( dir == null ) { System . err . println ( "WatchKey not recognized!!" ) ; continue ; } for ( WatchEvent < ? > event : key . pollEvents ( ) ) { WatchEvent . Kind kind = event . kind ( ) ; // TBD - provide example of how OVERFLOW event is handled if ( kind == OVERFLOW ) { continue ; } // Context for directory entry event is the file name of entry WatchEvent < Path > ev = cast ( event ) ; Path name = ev . context ( ) ; Path child = dir . resolve ( name ) ; // print out event System . out . format ( "%s: %s%n" , event . kind ( ) . name ( ) , child ) ; // if directory is created, and watching recursively, then // register it and its sub-directories if ( recursive && ( kind == ENTRY_CREATE ) ) { try { if ( Files . isDirectory ( child , NOFOLLOW_LINKS ) ) { registerAll ( child ) ; } } catch ( IOException x ) { // ignore to keep sample readbale } } } // reset key and remove from set if directory no longer accessible boolean valid = key . reset ( ) ; if ( ! valid ) { keys . remove ( key ) ; // all directories are inaccessible if ( keys . isEmpty ( ) ) { break ; } } } }
Process all events for keys queued to the watcher