カレントディレクトリを取得する

広告

相対パスを絶対パスに変換するときに使用する Path クラスで用意されている toAbsolutePath メソッドを使用すると、現在のカレントディレクトリを取得することができます。ここでは Java を使ってカレントディレクトリを取得する方法について解説します。

toAbsolutePathメソッドを使ってカレントディレクトリを取得する

それでは Path クラスの toAbsolutePath メソッドを使ってカレントディレクトリを取得する方法です。最初に Paths.get メソッドの引数に空文字を指定して Path オブジェクトを取得します。

Path p = Paths.get("");

空文字を指定した場合には相対パスでの指定と同じなので、カレントディレクトリからの相対パスとして扱われます。引数に指定したパスは空文字なので、結果としてこの Path オブジェクトはカレントディレクトリを表す Path オブジェクトとなります。

次に Paths クラスの toAbsolutePath メソッドを使用すると、 Path オブジェクトが持つ相対パスの情報を絶対パスに変換し、絶対パスの情報を持つ新しい Path オブジェクトにして返してくれます。( toAbsolutePath メソッドの詳しい使い方について「相対パスを絶対パスに変換する(Path.toAbsolutePath)」を参照されてください)。

Path p1 = Paths.get("");
Path p2 = p1.toAbsolutePath();

System.out.println(p2.toString());

これで p2 には絶対パスでのカレントディレクトリを表すパス情報が格納されました。あとは Path オブジェクトの文字列表現を取得すればカレントディレクトリを取得することができます。

サンプルコード

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

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

class JSample17_1{
  public static void main(String[] args){
    Path p1 = Paths.get("");
    Path p2 = p1.toAbsolutePath();

    System.out.println(p2.toString());
  }
}

コンパイルを行います。

javac -encoding UTF-8 JSample17_1.java

その後で、次のように実行してください。

java JSample17_1

toAbsolutePathメソッドを使ってカレントディレクトリを取得する(1)

カレントディレクトリを取得することができました。

System.getPropertyメソッドを使ってカレントディレクトリを取得する

Java を使ってカレントディレクトリを取得する方法はいくつかあるのですが、その中のひとつとして System クラスで用意されている getProperty メソッドを使用する方法をご紹介します。

public static String getProperty?(String key)

パラメータ:
key - システム・プロパティの名前

戻り値:
システム・プロパティの文字列値。そのキーを持つプロパティが存在しない場合はnull

例外:
SecurityException - セキュリティ・マネージャが存在し、セキュリティ・マネージャのcheckPropertyAccessメソッドが指定されたシステム・プロパティへのアクセスを許可しない場合
NullPointerException - keyがnullである場合
IllegalArgumentException - keyが空である場合

1 番目の引数にシステム・プロパティのキーを指定します。戻り値としてキーに対応する値を取得できます。

指定可能なシステム・プロパティのキーとしては次のようなものがあります。

キー
java.versionJava Runtime Environmentバージョン
java.version.dateJava Runtime Environmentバージョン日付(「ISO-8601 YYYY-MM-DD」形式)
java.vendorJava Runtime Environmentのベンダー
java.vendor.urlJavaベンダーのURL
java.vendor.versionJavaベンダー・バージョンの(optional)
java.homeJavaのインストール先ディレクトリ
java.vm.specification.versionJava Virtual Machine仕様のバージョン
java.vm.specification.vendorJava仮想マシンの仕様のベンダー
java.vm.specification.nameJava仮想マシンの仕様名
java.vm.versionRuntime.Versionとして解釈されるJava Virtual Machineの実装バージョン
java.vm.vendorJava仮想マシンの実装のベンダー
java.vm.nameJava仮想マシンの実装名
java.specification.versionJava Runtime Environment仕様バージョン
java.specification.vendorJava Runtime Environmentの仕様のベンダー
java.specification.nameJava Runtime Environmentの仕様名
java.class.versionJavaクラスの形式のバージョン番号
java.class.pathJavaクラス・パス
java.library.pathライブラリのロード時に検索するパスのリスト
java.io.tmpdirデフォルト一時ファイルのパス
java.compiler使用するJITコンパイラの名前
os.nameオペレーティング・システム名
os.archオペレーティング・システムのアーキテクチャ
os.versionオペレーティング・システムのバージョン
file.separatorファイル区切り文字(UNIXでは"/")
path.separatorパス区切り文字(UNIXでは":")
line.separator行区切り文字(UNIXでは"\n")
user.nameユーザーのアカウント名
user.homeユーザーのホーム・ディレクトリ
user.dirユーザーの現在の作業ディレクトリ

例えばキーとして "java.version" "java.home" "os.name" をそれぞれ指定してみた場合、私の環境では次のように出力されました。

String javaVersiton = System.getProperty("java.version");
System.out.println(javaVersiton); // 15.0.2

String javaHome = System.getProperty("java.home");
System.out.println(javaHome); //  C:\pg\java\jdk-15.0.2

String osName = System.getProperty("os.name");
System.out.println(osName);  // Windows 10

カレントディレクトリを取得する場合にはキーとして "user.dir" を指定してください。

String userDir = System.getProperty("user.dir");
System.out.println(userDir);  // C:\code\java\file

カレントディレクトリを取得することができました。

サンプルコード

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

class JSample17_2{
  public static void main(String[] args){
    String userDir = System.getProperty("user.dir");
    System.out.println(userDir);
  }
}

コンパイルを行います。

javac -encoding UTF-8 JSample17_2.java

その後で、次のように実行してください。

java JSample17_2

System.getPropertyメソッドを使ってカレントディレクトリを取得する(1)

カレントディレクトリを取得することができました。

-- --

Java を使ってカレントディレクトリを取得する方法について解説しました。

( Written by Tatsuo Ikura )

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

著者 / TATSUO IKURA

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