での相対パスの使用java.io.File
は、現在の作業ディレクトリに完全に依存しています。これは、JAR の実行方法によって異なります。たとえば/foo
、にいて、JAR を実行したjava -jar /bar/jar/Bar.jar
場合、作業ディレクトリはまだ/foo
. しかし、実行cd
し/bar/jar
て実行するとjava -jar Bar.jar
、作業ディレクトリは/bar/jar
.
JAR が配置されているルート パスが必要な場合は、次のいずれかの方法があります。
File root = new File(Thread.currentThread().getContextClassLoader().getResource("").toURI());
これは、JAR ファイルのルート パスを返します (つまり、クラスパス ルート)。リソースをクラスパス ルートに相対的に配置すると、次のようにアクセスできます。
File resource = new File(root, "filename.ext");
または、次を使用することもできます。
File resource = new File(Thread.currentThread().getContextClassLoader().getResource("filename.ext").toURI());