web-dev-qa-db-ja.com

実行中のクラスのファイルシステムパスの取得

Javaコマンドを使用して実行された場合、実行時にこのクラスのコードから実行されたクラスの現在のファイルシステムの場所を決定する方法はありますか?

次のクラスの例:

public class MyClass{
 public static void main(String[] args){\
   new MyClass().doStuff();
 }

 private void doStufF(){
   String path = ... // what to do here?!
   System.out.println("Path of class being invoked: " + path);
 }

}

呼び出されたばかりのMyClass.classファイルのファイルシステムに正しいパスを取得して印刷する方法はありますか?

同様に、Java -jarコマンドからjarファイルを呼び出す場合、そのjar内のクラス内からjarファイルのパスを取得する方法はありますか?

P.S .:お願い、作業ディレクトリについて仮定しないJavaコマンドの呼び出し元!

59
Piotr Sobczyk

次のコードスニペットがこれを行います。

final File f = new File(MyClass.class.getProtectionDomain().getCodeSource().getLocation().getPath());

MyClassmainクラスに置き換えます

結果のFileオブジェクトfは、.jar実行されたファイル。このオブジェクトを使用して、.jarが入っています。

94
user177800