2016-10-29 18 views
2

相対パスの組み合わせを使用して、javaのarrayListに.txtファイルをロードしようとしています。 私のjarファイルは/usr/tool/dist/tool.jar に私がロードするファイルである私は私のパスを取得することができたと思います/usr/tool/files/file.txtアプリケーションの.jarファイルと同じディレクトリにあるファイルを開く方法は?

でありますtool.jar、しかし、私はそのパスから私のファイルがあるものに行くことができますか?

私は実行されているあなたのjarファイルのパスを見つけるには、次のコード

// String path should give me '/usr/tool' 
File f = new File(System.getProperty("java.class.path")); 
File dir = f.getAbsoluteFile().getParentFile(); 
String path = dir.toString(); 
String table1 = this should represent /usr/tool/files/file.txt 
BufferedReader buf_table1 = new BufferedReader(new FileReader(new File(table1))); 
+0

をあなたはそれが(言うようにあなたが 'のSystem.out.println(パス)をテストする必要があります' PATH'は '' "は/ usr /ツール" である場合; 'と追加しますか?結果をあなたの質問に)。なぜ、 'table1 = path +" /files/file.txt "'のようなものを書いてみませんか? – Alden

+0

CLASSPATHはファイルではありません。これは、.classファイルが存在するディレクトリと.jarファイルのリストです。あなたが何を求めているのか不明です。 – EJP

答えて

2

を持って、java.class.pathは右のプロパティではありません。このプロパティには複数のファイルが含まれていて、どちらが正しいかわからない場合があります。 (See the docs.

が正しいjarファイルのパスを見つけるには、あなたの代わりにこれを使用することができます:

URL url = MainClass.class.getProtectionDomain().getCodeSource().getLocation().getPath(); 

どこMainClass、ツールのメインクラス、または同じjarファイル内の他のクラス。

次に、ファイルの親Fileがそのディレクトリです。親File/usr/tool/dist/tool.jarの場合、/usr/tool/dist/となります。だから/usr/tool/files/file.txtに行きたい場合は、親の親を取得し、次にそこからfiles/file.txtを取得する必要があります。それを一緒に置く

File jarFile = new File(MainClass.class.getProtectionDomain().getCodeSource().getLocation().getPath()); 
File file = new File(jarFile.getParentFile().getParent(), "files/file.txt"); 
+0

はい、あなたのクラス名で 'MainClass'を置き換えてください。 – janos

関連する問題