使用文件系统 API

org.eclipse.core.filesystem 插件提供了用于与任意文件系统进行交互的通用 API。此 API 与 java.io.File 类似,但有几个关键的差别:

在文件系统 API 中,任何给定文件的路径都表示成分层的 java.net.URI。URI 模式表示文件系统的类型,URI 路径组件表示文件在文件系统树中的位置。因此,任何给定的分层 URI 都表示某种任意文件系统中的潜在文件或目录。

org.eclipse.core.filesystem 包提供了用于处理文件和文件系统的 API。中央的 API 类型是 IFileStoreIFileStore 的每个实例都表示文件系统中的单个文件。对于 IResource 来说,IFileStore 实例的存在并不表示在磁盘上存在这样的文件。可以使用 IFileStore 实例来对文件创建、删除、复制、移动或打开流。对于给定的 URI,可以使用静态方法 EFS.getStore(URI) 来处理 IFileStore 实例。

可以使用 IFileSystem 接口来了解有关文件系统的整体信息。每个 IFileSystem 实例都表示单个 URI 模式,例如“file:”和“ftp:”等等。可以使用此类型来询问问题,例如支持哪些文件属性以及文件系统是否区分大小写。可以使用此类型来获取给定 URIIFileStore

IFileStore 的大部分方法带有一个标志参数,它允许提供额外的参数。可以在 EFS 类中找到标志值。例如,要打开输出流以便对某个文件进行追加,请使用:

	IFileStore store = ...//some file store
	store.openOutputStream(EFS.APPEND, null);

如果要使用方法的缺省行为,请使用 EFS.NONE

IFileInfo 接口表示文件在特定时间点的状态。尤其是,您可以了解有关该文件是否存在、它是否是目录以及它具有哪些属性之类的信息。您可以修改此信息并将其重新存储到文件中。例如,以下片段对一个目录设置只读属性:

	IFileStore store = ...//some file store
   IFileInfo info = store.fetchInfo();
	if (info.exists() && info.isDirectory()) {
		info.setAttribute(EFS.ATTRIBUTE_READ_ONLY, true);
		store.putInfo(info, EFS.SET_ATTRIBUTES, null);
	}

这种样式的 API 允许您通过对文件系统执行一次调用来获取并更改文件系统。在以上示例中,只有一个用于访存信息的文件系统调用,您可以对 IFileInfo 对象执行任意次操作,而不会再次存取磁盘。

EFS 类包含用于获取 IFileStoreIFileSystem 实例的静态工厂方法以及各种选项常量和错误代码。