ファイル・システム API の使用

org.eclipse.core.filesystem プラグインは、任意のファイル・システムと相互作用するための汎用 API を提供します。この API は java.io.File に似ていますが、以下の主な違いがあります。

ファイル・システム API では、ファイルのパスが階層 java.net.URI で表されます。 URI スキームはファイル・システムの種類を表し、URI パス・コンポーネントはファイル・システム・ツリー内のファイルのロケーションを表します。したがって、階層 URI は、任意のファイル・システムのファイルまたはディレクトリーを表すことになります。

ファイルおよびファイル・システムで作業するための API は、 org.eclipse.core.filesystem パッケージにあります。中心的な API タイプは IFileStore です。 IFileStore の各インスタンスは、ファイル・システム内の単一ファイルを表します。 IResource の場合、IFileStore インスタンスが存在していても、そのようなファイルがディスク上に存在することにはなりません。 IFileStore インスタンスを使用して、ファイル上でストリームを作成、削除、コピー、移動または開くことができます。 URI では、静的メソッド EFS.getStore(URI) を使用して IFileStore インスタンスを取得できます。

IFileSystem インターフェースでは、ファイル・システム全体に関する情報を取得することができます。各 IFileSystem インスタンスは、「file:」、「ftp:」などの単一 URI スキームを表します。このタイプを使用して、サポートされるファイル属性、またはファイル・システムが大/小文字を区別するかどうかなどを問い合わせることができます。また、このタイプを使用して、ある 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 は、ファイル・システムへの 1 回の呼び出しでファイル情報を取得して変更できるようにします。上記の例では、情報を取り出すファイル・システム呼び出しが 1 回だけ行われ、以降はディスクにアクセスすることなく、IFileInfo オブジェクト上で必要な回数だけ操作を実行できます。

EFS クラスには、さまざまなオプション定数およびエラー・コードと共に、IFileStore および IFileSystem インスタンスを取得する静的ファクトリー・メソッドがあります。