Is there a way to detect file renaming using Java? (NIO's WatchService API or any other) From what I've seen when renaming a file two separate events occur - ENTRY_DELETE and then ENTRY_CREATE.
3 Answers
Take a look at jpathwatch. In addition to the standard watch event kinds specified in Java 7 (ENTRY_CREATE, ENTRY_DELETE, ENTRY_MODIFY) it also has additional events called ENTRY_RENAME_FROM and ENTRY_RENAME_TO which will fire when a file is renamed. Note that this depends on whether the underlying operating system supports file renaming events or not.
Comments
Detecting renaming of files can not be done portably. Because, surprising as it may seem, the idea that a file HAS-A name is not portable. Most Unix file systems allow a file to have any number of ASSOCIATED names (including zero names). In the Unix (POSIX) world, renaming means adding a new name and then removing the original name.