java:自分自身の絶対パスを知る方法
寒い日が続いています。
こんにちは、寒いのが苦手なイガジー@管理人です。
プログラムで、設定ファイルを書き込んだり、関連ファイルを読み出したり
するために、自分自身(プログラム自身)が置かれているディレクトリへの
パスが知りたい事があります。
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)
をご覧ください。
参考になりました。ありがとう。