これは簡単なデモで、WatchService をセットアップしてイベントを待機します。
Path dir = Paths.get( "/home", "me", "experiments" );
WatchService watcher = dir.getFileSystem().newWatchService();
dir.register( watcher, ENTRY_CREATE, ENTRY_DELETE, ENTRY_MODIFY );
WatchKey key = watcher.take();
for (WatchEvent<?> event: key.pollEvents()) {
System.out.println( event.kind().name() + " " + event.context() );
}
このプログラムが呼び出しで待機している間にmv xyz.dat abc.dat
が実行されると、次のイベントを含む WatchKey が作成されます。./experiments
take()
ENTRY_DELETE zyx.dat
ENTRY_CREATE xyz.dat
コンテキストは、ディレクトリから変更された要素への相対パスです。
後で、ファイルのデバイスと inode を決定し、おそらくサイズと作成日を追加することで、Linux にファイルの「ID」を登録することができます。その後、制御を取り戻した後、同じディレクトリであると想定して、このファイルを検索できます。
Path dir = Paths.get( "/home", "wlaun", "Java_Experiments" );
Path file = dir.resolve( "a.log" );
Object fileKey = Files.getAttribute( file, "fileKey" );
Object creaTime = Files.getAttribute( file, "creationTime" );
System.out.println( fileKey.toString() + creaTime.toString() );
1.8.0_20 では、creationTime と lastAccessTime が混同されているようです。