Discussions
Categories
- 197.2K All Categories
- 2.5K Data
- 546 Big Data Appliance
- 1.9K Data Science
- 450.8K Databases
- 221.9K General Database Discussions
- 3.8K Java and JavaScript in the Database
- 31 Multilingual Engine
- 552 MySQL Community Space
- 479 NoSQL Database
- 7.9K Oracle Database Express Edition (XE)
- 3.1K ORDS, SODA & JSON in the Database
- 555 SQLcl
- 4K SQL Developer Data Modeler
- 187.2K SQL & PL/SQL
- 21.4K SQL Developer
- 296.3K Development
- 17 Developer Projects
- 139 Programming Languages
- 293K Development Tools
- 110 DevOps
- 3.1K QA/Testing
- 646.1K Java
- 28 Java Learning Subscription
- 37K Database Connectivity
- 158 Java Community Process
- 105 Java 25
- 22.1K Java APIs
- 138.2K Java Development Tools
- 165.3K Java EE (Java Enterprise Edition)
- 19 Java Essentials
- 162 Java 8 Questions
- 86K Java Programming
- 81 Java Puzzle Ball
- 65.1K New To Java
- 1.7K Training / Learning / Certification
- 13.8K Java HotSpot Virtual Machine
- 94.3K Java SE
- 13.8K Java Security
- 205 Java User Groups
- 24 JavaScript - Nashorn
- Programs
- 468 LiveLabs
- 39 Workshops
- 10.2K Software
- 6.7K Berkeley DB Family
- 3.5K JHeadstart
- 5.7K Other Languages
- 2.3K Chinese
- 175 Deutsche Oracle Community
- 1.1K Español
- 1.9K Japanese
- 233 Portuguese
WatchService WatchKey.cancel() is really forever ?

I am using java 8 on linux ubuntu 12.04 following the guidelines Watching a Directory for Changes (The Java™ Tutorials > Essential Classes > Basic I/O)
This works but I notice that once I cancel a watchkey with watchkey.cancel() , I seem to be unable to reenable it again. So I can never watch a directory after I have cancelled the corresponding watchkey (even after reboot ) ?
The API Doc says that " Once cancelled, a watch key remains forever invalid."
What does "forever" mean ? There must be a way to re-watch a dir after the key has been cancelled.
Thanks for your help.
Answers
-
In reply to my request: sorry , I had a logical error in my test case that did not clean up the to-be-watched directory structure correctly.
Remains the question: what is "forever" ? Until a new watchservice is created ?
Sorry for the noise.
-
Registering recursively will work as Sotirios has indicated. This effectively registers each directory/sub-directory that currently exists.
You can alternatively import and use *com.sun.nio.file.ExtendedWatchEventModifier.FILE_TREE* as in:
<span class="pln" style="background: transparent;">dir</span><span class="pun" style="background: transparent;">.</span><span class="kwd" style="color: #00008b; background: transparent;">register</span><span class="pun" style="background: transparent;">(</span><span class="pln" style="background: transparent;">watcher</span><span class="pun" style="background: transparent;">,</span><span class="pln" style="background: transparent;"> standardEventsArray</span><span class="pun" style="background: transparent;">,</span><span class="pln" style="background: transparent;"> </span><span class="typ" style="color: #2b91af; background: transparent;">ExtendedWatchEventModifier</span><span class="pun" style="background: transparent;">.</span><span class="pln" style="background: transparent;">FILE_TREE</span><span class="pun" style="background: transparent;">);</span>
This will watch the entire sub-tree for change AND account for added directories and sub-directories.
Otherwise you will have to monitor for any new directories/sub-directories and register them also. There can also be an issue with deleting parts of the directory hierarchy since each registered directory has a handle watching it so the (lowest) sub-directories need to be removed first when deleting parts of the structure.