清单 3. 使用 pollEvents()
File tempFile = new File(watchDirFile, "tempFile");
tempFile.createNewFile();
// Now call take() and see if the event has been registered
WatchKey watchKey = watchService.take();
for (WatchEvent<?> event : watchKey.pollEvents()) {
System.out.println(
"An event was found after file creation of kind " + event.kind()
+ ". The event occurred on file " + event.context() + ".");
}
当执行完成后,清单 3 中的代码打印为:
on file tempFile.
An event was found after file creation of kind ENTRY_MODIFY. The event occurred
on file tempFile.
正如您所见到的,我们得到了期望的、新创建的 tempFile 的 ENTRY_CREATE 事件,但我们还得到了其他事件。在一些操作系统中,文件的创建或删除也会产生修改事件,那么不管是什么 OS ,我们只会得到 ENTRY_CREATE 事件。
示例代码 下载 中包含扩展的示例代码(展示了在这部分的例子中,为注册的 WatchKey 进行的文件修改与删除)。
文件属性
第三个并且是最后一个例子涉及了利用 java.nio.file.attribute 包中的类获取并设置文件属性的新的 API。
新的 API 能够提供对各种文件属性的访问。在以前的 Java 版本中,仅能得到基本的文件属性集(大小、修改时间、文件是否隐藏、以及它是文件还是目录)。为了获取或者修改更多的文件属性,必须利用运行所在平台特定的本地代码来实现,这很困难。很幸运的是,Java 7 能够允许您通过很简单的方式,利用 java.nio.file.attribute 类来读取,如果可能,修改扩展的属性集,完全去掉了这些操作的平台特定属性。
在新的 API 中有七个属性视图,其中一些特定于操作系统。这些 “ 视图 ” 类允许您获取并设置任何关联的属性,并且其中每个都具有对应的包含真实属性信息的属性类。让我们依次来看一下。
AclFileAttributeView 与 AclEntry
AclFileAttributeView 允许您为特定文件设置 ACL 及文件所有者属性。其 getAcl() 方法返回一个 List of AclEntry 对象,每个对应文件的一个权限集。其 setAcl(List