Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

カレントパスを取得したい

javaのプログラムのパスを取得し、
同一ディレクトリにおいてある設定ファイルを
指定したいです。

探した限りだと、以下のような方法でパス取得ができる
ようでした。
System.getProperty("user.dir")
new File(".").getAbsoluteFile()

で、パッケージのjarファイルを作り、タスクスケジュ
ーラから実行したところ、上記のいずれともタスクスケ
ジューラのパスを取得してしまい、設定ファイルを読め
なくなってしまいました。

タスクスケジューラから実行しても、javaのカレントパ
スを取得する方法はありませんか?

6

回答

96056

閲覧

6件の回答

評価

0

質問者様が期待するのは「カレントディレクトリ」ではな
く「プログラム=jarファイルが存在するディレクトリ」
でしょうか?

もしjarが存在するディレクトリということでしたら
Class.getResourceを使うと求めることができます。

package xx.yy.zz;

class MyMainClass {
  public static void main(String[] args) {
    String basePath = 
MyMainClass..class.getResource("..").toExternalForm(
);
    System.out.println(basePath);
  }
}

なおjarではなくclassファイルの場所をCLASSPATHに指定
して動かしている場合はclassファイルが置かれているデ
ィレクトリのトップ(上の例だとxxディレクトリの親ディ
レクトリ)が求まります。

補足:「カレントパス」あるいは「カレントディレクト
リ」という用語には「プログラムの在り処」という意味合
いはないです。プログラム(が動作中のプロセス)が現在注
目しているディレクトリでありプログラムの動作中にあち
こちに変化するものです。またプログラムがプログラムの
存在する場所を最初のカレントディレクトリとするという
保証も一般的にはありません。質問文で上記をごっちゃに
されている気がします。


評価

0

おっしゃる通り、カレントパスではなく、
「jarファイルが存在するディレクトリ」です。
おかげさまでjarファイルでもディレクトリを取得でき
ることを確認できました。

このjarファイルをexewrapにかけて、exe化したとこ
ろ、
NullPointerExceptionが発生し、ディレクトリを取得で
きませんでした。

最初からexewrapの場合で聞くべきで申し訳ありません
が、(jarもexeでも同じだと思っていました)
exewrapにかけた場合に、exeのディレクトリを取得する
にはどうすればよいのでしょうか。

評価

0

exewrapは使ったことがないのですがJREも含めてまるごと
javaの実行環境をEXE内にパックし自前のスタートアップ
コードによりjava環境を生成して起動するツールのように
見えますのでjavaの標準機能による起動とに比べて制限が
あるのかも知れません。

exewrapのオプションなどによる手段があるかどうかは他
の有識者におまかせするとして、「もし自前でjavaコード
の中で可能ななるべく汎用の方法を考えるなら」という前
提で考えると、環境変数PATHからEXEの場所を自前で調べ
るというような原始的な方法が思い浮かびます。ただEXE
の名前はあらかじめ仮定しないといけませんが。

評価

0

-Duser.dir=

評価

0

System.getProperty("java.application.path")
でいけたよ。
コメントくれたみなさま、ありがとうございました。

評価

0

逆に参考になりました。ありがとうさんです w;

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。