相対パスを絶対パスに変換する(Path.toAbsolutePath)

広告

Path クラスで用意されている toAbsolutePath メソッドを使用すると、 Path オブジェクトが持つ相対パスの情報を絶対パスに変換したうえで、絶対パスで表されたファイルまたはディレクトリの情報を持つ新しい Path オブジェクトを取得できます。ここでは Java を使って相対パスを絶対パスに変換する方法について解説します。

相対パスを絶対パスに変換する

Path オブジェクトを作成するとき、対象となるファイルは絶対パスまたは相対パスで指定することができます。例えばカレントディレクトリが C:\code\java\file\ のとき、次の 2 つの Path オブジェクトは同じファイルを表します。

Path p1 = Paths.get("C:/code/java/file/report.txt");
Path p2 = Paths.get("report.txt");

Path クラスで用意されている toAbsolutePath メソッドを使用すると、 Path オブジェクトが持つ相対パスの情報を絶対パスに変換し、絶対パスの情報を持つ新しい Path オブジェクトにして返してくれます。 toAbsolutePath メソッドの書式は次の通りです。

Path toAbsolutePath()

戻り値:
絶対パスを表すPathオブジェクト

例外:
IOError - 入出力エラーが発生した場合
SecurityException - デフォルト・プロバイダで、セキュリティ・マネージャがインストールされていて、このパスが絶対でない場合、セキュリティ・マネージャのcheckPropertyAccessメソッドが呼び出されてシステム・プロパティuser.dirへのアクセスがチェックされる

メソッドを実行すると、対象の Path オブジェクトが示すファイルまたはディレクトリを絶対パスで表した新しい Path オブジェクトを返します。

次のサンプルを見てください。カレントディレクトリは C:\code\java\file\ です。

Path p1 = Paths.get("report.txt");
Path p2 = p1.toAbsolutePath();
System.out.println(p2.toString());  // C:\code\java\file\report.txt

絶対パスの情報をもつ新しい Path オブジェクトを取得することができました。

サンプルコード

それでは簡単なサンプルプログラムを作って試してみます。テキストエディタで次のように記述したあと、 JSample13-1.java という名前で保存します。

import java.nio.file.Path;
import java.nio.file.Paths;

class JSample13_1{
  public static void main(String[] args){
    Path p1 = Paths.get("C:/code/java/file/report.txt");
    Path p2 = Paths.get("report.txt");
    Path p3 = p2.toAbsolutePath();

    System.out.println(p1);
    System.out.println(p2);
    System.out.println(p3);
  }
}

コンパイルを行います。

javac -encoding UTF-8 JSample13_1.java

その後で、次のように実行してください。このときカレントディレクトリは C:\code\java\file です。

java JSample13_1

相対パスを絶対パスに変換する(1)

絶対パスと相対パスでそれぞれ同じファイルを対象とした Path オブジェクトを作成したあと、相対パスで作成した Path オブジェクトから絶対パスに変換した Path オブジェクトを新しく取得しました。

Pathオブジェクトが絶対パスか判定する

Path オブジェクトが絶対パスか相対パスか判定するには Path クラスで用意されている isAbsolute メソッドを使用します。書式は次のとおりです。

boolean isAbsolute()

戻り値:
このパスが絶対である場合にのみtrue

メソッドを実行すると Path オブジェクトが絶対パスの情報を持っている場合に戻り値として true を返します。

次のサンプルを見てください。

Path p1 = Paths.get("report.txt");
Path p1 = Paths.get("C:/code/java/file/report.txt");

System.out.println(p1.isAbsolute());  // false
System.out.println(p2.isAbsolute());  // true

Path オブジェクトが持つパスの情報が絶対パスか相対パスか調べたい場合に使用されてください。

-- --

Java を使って相対パスを絶対パスに変換する方法について解説しました。

( Written by Tatsuo Ikura )

関連記事 (一部広告含む)
Profile
profile_img

著者 / TATSUO IKURA

初心者~中級者の方を対象としたプログラミング方法や開発環境の構築の解説を行うサイトの運営を行っています。