2012-02-22 3 views
0

jarがプログラムでforkされている場所から現在の場所を見つける方法はありますか? D:/Jars/myjar.jarからJarを実行しているとします。コードからそのパスを取得できますか?Jarファイルの自己位置を見つける


@AljoshaBre私はこの

try { 
     File file = new File(getClass().getProtectionDomain().getCodeSource().getLocation().toURI().getPath()); 
     System.out.println(file.getAbsolutePath()); 
    } catch (Exception e1) { 

     e1.printStackTrace(); 
    } 

は、NPEを投げてみました。 :(

しかし

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

はclient.jarの表示されるわけではありません、絶対パスそれは瓶の中にある

+0

「のjava」コマンドと呼ばれる場所のパスを返しますユニットテスト中にJARファイルにパッケージ化されていますか? – yegor256

+0

ありがとう@ yegor256しかし、私はユニテストではありません。私は瓶自体を実行しています。 –

+0

期待されるインスタンスの代わりに正確に何が返されたかを知るためには、複数の行でコールのシーケンス( '' getClass()。getProtectionDomain()。..)を分割する必要があります。 –

答えて

7

の方法があります:。。。あなたならば

return new File(ClassA.class.getProtectionDomain().getCodeSource().getLocation().toURI().g‌​etPath()); 
+1

ありがとう私はコードを追加しました。しかし、それはNullPointerExceptionを投げている –

+0

@ TapasBoseどのような場合にあなたはNPEを手に入れたか、あなたはそれをどのように解決できますか? – dbw

-4

は、実行する場合はjava -jar D:/Jars/myjar.jarとして実行してください

new File("afile").getAbsolutePath(); 

D:/ Jars/afileを返すだけで、部分文字列を行うことができます。

新しいファイルは、jarが存在するフォルダからファイルを作成します。このJARをアプリケーションにインポートすると、このメソッドは機能しません。

私が試した申し訳ありません...それは真実ではない:Pは、それはあなたのコードは**ない**まだあるので、多分それは、NPEを投げ

+0

ありがとう、もし私がcmdの 'java -jar" C:\ Users \ Tanmoy \ Desktop \ Movie Library.jarから実行すると '' 'System.out.println(新しいファイル(" afile ")。getAbsolutePath());' 'C:\ Users \ Tanmoy \ afile'をプリントしますが、' Desktop'はプリントしません。 –

関連する問題