技术开发 频道

Java7 NIO.2入门:文件系统API教程

  清单 3. 使用 pollEvents()

// Create a file inside our watched directory
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 中的代码打印为:

An event was found after file creation of kind ENTRY_CREATE. The event occurred
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) 方法允许您修改该访问列表。这些属性视图仅可用于 Microsoft® Windows® 系统。

0
相关文章