このページを正しく表示するには、ブラウザでJavaScriptを有効にする必要があります。
コース: 重要なクラス
レッスン: 基本的なI/O
セクション: ファイルI/O(NIO.2を含む)
シンボリック・リンクとその他のリンク
ホームページ > 重要なクラス > 基本的なI/O

シンボリック・リンクとその他のリンク

前述のとおり、java.nio.fileパッケージ、特にPathクラスは"リンクの認識"が可能です。 すべてのPathメソッドでは、シンボリック・リンクがある場合の対処方法が自動的に検出されるか、またはシンボリック・リンクがある場合の動作をオプションで設定できます。

これまでシンボリック・リンク(ソフト・リンク)について説明してきましたが、一部のファイル・システムではハード・リンクもサポートされます。 ハード・リンクは次の点で、シンボリック・リンクよりも強い制限があります。

これらの制約があるため、ハード・リンクはシンボリック・リンクほど頻繁には使用されませんが、Pathメソッドはハード・リンクともシームレスに動作します。

リンクを処理するための専用のメソッドがいくつかあります。これらは次のセクションで説明します。

シンボリック・リンクの作成

ファイル・システムでサポートされる場合は、createSymbolicLink(Path, Path, FileAttribute<?>)メソッドを使用してシンボリック・リンクを作成できます。 2つ目のPath引数は、リンク先のファイルまたはディレクトリを表します。この指定は任意です。 次のコードでは、デフォルトの権限を持つシンボリック・リンクを作成します。

Path newLink = ...;
Path target = ...;
try {
    Files.createSymbolicLink(newLink, target);
} catch (IOException x) {
    System.err.println(x);
} catch (UnsupportedOperationException x) {
    //一部のファイル・システムではシンボリック・リンクはサポートされません。
    System.err.println(x);
}

FileAttribute可変引数で、リンクの作成時に原子的に設定される初期ファイル属性を指定できます。 ただし、この引数は将来のバージョンで対応予定であり、現在は実装されていません。

ハード・リンクの作成

createLink(Path, Path)メソッドを使用して、既存のファイルに対するハード・リンク(通常のリンク)を作成できます。 2つ目のPath引数は既存のファイルの場所を特定するものです。このファイルは存在している必要があり、存在しない場合はNoSuchFileExceptionがスローされます。 リンクは次のように作成します。

Path newLink = ...;
Path existingFile = ...;
try {
    Files.createLink(newLink, existingFile);
} catch (IOException x) {
    System.err.println(x);
} catch (UnsupportedOperationException x) {
    //一部のファイル・システムではディレクトリに対して既存のファイルを追加する操作はサポートされません。
    System.err.println(x);
}

シンボリック・リンクの検出

Pathインスタンスがシンボリック・リンクであるかどうかを判断するには、isSymbolicLink(Path)メソッドを使用できます。 このメソッドは次のように使用します。

Path file = ...;
boolean isSymbolicLink = Files.isSymbolicLink(file);
詳細は、メタデータの管理を参照してください。

リンク先の検索

readSymbolicLink(Path)メソッドを次のように使用して、シンボリック・リンクのリンク先を取得できます。

Path link = ...;
try {
    System.out.format("Target of link '%s' is '%s'%n", link, Files.readSymbolicLink(link));
} catch (IOException x) {
    System.err.println(x);
}

Pathがシンボリック・リンクでない場合、このメソッドはNotLinkExceptionをスローします。


サンプル・プログラムで問題が発生した場合は、 Compiling and Running the Examples: FAQsを参照してください。
フィードバックをお寄せください。さまざまなご意見をお待ちしております。

前のページ: ディレクトリの作成と読取り
次のページ: ファイル・ツリーの探索