📘

Javaでクラスパス上のファイルをPathとして取得する

2024/08/13に公開

環境

JDK 17を使っています。たぶん、多少バージョンが違っていても同じように動くと思います。

今回のフォルダ構造

今回はsrc/main/resources配下のファイルを取得したいとします。

$ tree .
.
└── src
    └── main
        ├── java
        │   └── foo
        │       └── Main.java
        └── resources
            ├── sample1.txt
            └── bar
                └── baz
                    └── sample2.txt

コード

Main.java
package foo;

import java.nio.file.Path;

public class Main {
    public static void main(String[] args) {
        Path path1 = Path.of(Main.class.getClassLoader().getResource("sample1.txt").toURI());
        Path path2 = Path.of(Main.class.getClassLoader().getResource("bar/baz/sample2.txt").toURI());
    }
}

指定したファイルが存在しなかった場合は getResource()null を返すので、NullPointerExceptionが発生します。

それを防ぎたい場合は、 getResource() の戻り値をいったん変数に代入して、if文で null チェックしてから toURI() するなどの対策が必要です。

Discussion