1. 概要

Javaで現在の作業ディレクトリを取得するのは簡単な作業ですが、残念ながら、これを行うための直接APIはJDKで利用できません。

このチュートリアルでは、java.lang。System java.io.Fileを使用してJavaの現在の作業ディレクトリを取得する方法を学習します。 、java .nio.file.FileSystems、および java.nio.file.Paths

2. システム

コード全体で現在の作業ディレクトリ名がBaeldungであると仮定して、 System#getPropertyを使用する標準ソリューションから始めましょう。

static final String CURRENT_DIR = "Baeldung";
@Test
void whenUsingSystemProperties_thenReturnCurrentDirectory() {
    String userDirectory = System.getProperty("user.dir");
    assertTrue(userDirectory.endsWith(CURRENT_DIR));
}

Java組み込みプロパティキーuser.dirを使用して、Systemのプロパティマップから現在の作業ディレクトリをフェッチしました。 このソリューションは、すべてのJDKバージョンで機能します。

3. ファイル

java.io.Fileを使用した別のソリューションを見てみましょう。

@Test
void whenUsingJavaIoFile_thenReturnCurrentDirectory() {
    String userDirectory = new File("").getAbsolutePath();
    assertTrue(userDirectory.endsWith(CURRENT_DIR));
}

ここで、 File#getAbsolutePath は、最初のソリューションと同様に、内部で System#getPropertyを使用してディレクトリ名を取得します。 これは、現在の作業ディレクトリを取得するための非標準のソリューションであり、すべてのJDKバージョンで機能します。

4. ファイルシステム

もう1つの有効な代替手段は、新しい java.nio.file.FileSystemsAPIを使用することです。

@Test
void whenUsingJavaNioFileSystems_thenReturnCurrentDirectory() {
    String userDirectory = FileSystems.getDefault()
        .getPath("")
        .toAbsolutePath()
        .toString();
    assertTrue(userDirectory.endsWith(CURRENT_DIR));
}

このソリューションは、新しい Java NIO API を使用し、JDK7以降でのみ機能します。

5. パス

そして最後に、 java .nio.file.PathsAPIを使用して現在のディレクトリを取得するためのより簡単なソリューションを見てみましょう。

@Test
void whenUsingJavaNioPaths_thenReturnCurrentDirectory() {
    String userDirectory = Paths.get("")
        .toAbsolutePath()
        .toString();
    assertTrue(userDirectory.endsWith(CURRENT_DIR));
}

ここで、 Paths#get は、内部で FileSystem#getPathを使用してパスをフェッチします。 新しいJavaNIO API を使用するため、このソリューションはJDK7以降でのみ機能します。

6. 結論

このチュートリアルでは、Javaで現在の作業ディレクトリを取得するための4つの異なる方法を検討しました。 最初の2つのソリューションは、JDKのすべてのバージョンで機能しますが、最後の2つのソリューションは、JDK 7以降でのみ機能します。

System ソリューションは効率的でわかりやすいため、使用することをお勧めします。このAPI呼び出しを静的ユーティリティメソッドでラップして直接アクセスすることで、ソリューションを簡素化できます。

このチュートリアルのソースコードは、GitHubから入手できます。これはMavenベースのプロジェクトであるため、そのままインポートして実行するのは簡単です。