java:自分自身の絶対パスを知る方法

   2018/04/28

寒い日が続いています。
こんにちは、寒いのが苦手なイガジー@管理人です。

プログラムで、設定ファイルを書き込んだり、関連ファイルを読み出したり
するために、自分自身(プログラム自身)が置かれているディレクトリへの
パスが知りたい事があります。

C言語では、main(int ac, int *av[]) の、av[0]で、自分自身のパスが
得られますが、Javaでは main(String [] args) の args[0]は、引数の
1つ目となっています(パスは得られません)。

そこで、System.getProperty(“java.class.path”) を使うと、
近いものが得られます。
jar にして動かしている時は、/hoge/fuga/program.jar という形で、
jarファイルの場所が得られますし、
Eclipseからクラスファイルを実行している時は
/fuge/workspace/prjname/bin という形のパスが得られます。

ただし、jar の場合、コンソールなどから java -jar を使って、
同じディレクトリで動かしたりすると、相対パスしか得られない事もあります。

そこで、以下のような関数を作ると、自分自身が居るディレクトの
絶対パスを得ることができます。

String get_currentpath(){
	String cp=System.getProperty("java.class.path");
	String fs=System.getProperty("file.separator");
	String acp=(new File(cp)).getAbsolutePath();
//
	int p,q;
	for(p=0;(q=acp.indexOf(fs,p))>=0;p=q+1);
	return acp.substring(0,p);
}

ご参考になれば幸いです。

※ 2018.04.28 追記
jar にして使う場合は上記で OK なのですが Eclipse上などから
動かす時にうまくいかなくなっていました。
新しい方法は→java:自分自身の絶対パスを知る方法(その2)
をご覧ください。

コメント一覧

  1. kinnsei より:

    参考になりました。ありがとう。

    • igazee より:

      お役に立てたようでよかったです。
      コメントありがとうございました。

この記事へのコメントはこちら

メールアドレスは公開されませんのでご安心ください。
また、* が付いている欄は必須項目となりますので、必ずご記入をお願いします。

内容に問題なければ、下記の「コメント送信」ボタンを押してください。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)