Javaで現在の作業ディレクトリを取得する

1. 概要

Javaで現在の作業ディレクトリを取得するのは簡単な作業ですが、残念ながら、JDKにはこれを行うための直接的なAPIはありません。
このチュートリアルでは、_java.lang.System _、_ java.io.File、java.nio.file.FileSystems、_、および_java.nio.file.Paths_を使用して、Javaの現在の作業ディレクトリを取得する方法を学習します。

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_’sプロパティマップから現在の作業ディレクトリを取得しました。 このソリューションは、すべての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. FileSystems

別の有効な代替手段は、new _java.nio.file.FileSystems_ APIを使用することです。
@Test
void whenUsingJavaNioFileSystems_thenReturnCurrentDirectory() {
    String userDirectory = FileSystems.getDefault()
        .getPath("")
        .toAbsolutePath()
        .toString();
    assertTrue(userDirectory.endsWith(CURRENT_DIR));
}
このソリューションは、新しいlink:/java-nio-2-file-api[Java NIO API]を使用し、* JDK 7以降*でのみ動作します。

5. Paths

最後に、_java.nio.file.Paths_ APIを使用して現在のディレクトリを取得する簡単なソリューションを見てみましょう。
@Test
void whenUsingJavaNioPaths_thenReturnCurrentDirectory() {
    String userDirectory = Paths.get("")
        .toAbsolutePath()
        .toString();
    assertTrue(userDirectory.endsWith(CURRENT_DIR));
}
ここで、_Paths#get_は内部的に_FileSystem#getPath_を使用してパスを取得します。 新しいlink:/java-nio-2-file-api[Java NIO API]を使用するため、このソリューションは* JDK 7以降でのみ機能します。

6. 結論

このチュートリアルでは、Javaで現在の作業ディレクトリを取得する4つの異なる方法を検討しました。 最初の2つのソリューションはJDKのすべてのバージョンで機能しますが、最後の2つのソリューションはJDK _7_以上でのみ機能します。
_System_ソリューションを使用することをお勧めします。これは効率的で簡単なので、このAPI呼び出しを静的ユーティリティメソッドにラップして直接アクセスできるためです。