Java実行時のディレクトリパス取得


いままでも何度か思ったのですが、今日は特に思ったのです。実行時に設定ファイルなんかを書き換えないで、実装も手間をかけずにJavaプロジェクトのルートディレクトリを取得したいなーと。


C:/foo/classes/以下に置かれたクラスを実行したとき、そのソースコードに以下のように書いてあれば

System.out.println(Thread.currentThread().getContextClassLoader().getResource("").getPath());

こんなんでます

/C:/foo/classes/


他にも以下のように書いてあれば

System.out.println(this.getClass().getProtectionDomain().getCodeSource().getLocation().getPath());

やっぱりこんなんでます

/C:/foo/classes/


これでFileクラスのgetParentとか使って上にたどれば、Javaプロジェクトのルートディレクトリとかに行けますね。でも、そのソースコードはかなりダサい感じになってしまいました。

Javaプロジェクトのルートなら、Mavenの${basedir}を使ってプロパティファイルを自動で置換すればいいじゃんと思ったのですが、Windowsでやるとディレクトリの区切りが\で面倒なことになりました。

じゃ、プロパティファイルの読み込みクラスを自作すれば・・とか、MavenXMLを置換して読み込めば・・とか、そんなことまではしないでやりたかったのです。

とりあえずこれでいいかーと思いながらも、もっといい方法ないかなーと考え中。