这是一个简单的演示,设置 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
执行了 a ,则会创建一个包含以下事件的 WatchKey:./experiments
take()
ENTRY_DELETE zyx.dat
ENTRY_CREATE xyz.dat
上下文是从目录到更改元素的相对路径。
稍后可以通过确定文件的设备和 inode 来在 Linux 上注册文件的“身份”,也许还可以添加大小和创建日期。然后,您可以在重新获得控制权后搜索此文件,假设它是同一目录。
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。