2009-06-24 9 views
2

Javaプログラムがどこでファイルを探しているかを知る方法があるかどうかは疑問でした。Javaがファイルをロードする場所を検索しますか?

FileInputStream fstream = new FileInputStream("ldaplookup.ini");で設定ファイルを読み込もうとしていますが、ファイルが見つかりませんというエラーが表示されています。 iniファイルはクラスファイルと同じフォルダにありますが、別の場所を検索していると仮定しています。

ありがとう、-Pete

+3

;) –

答えて

5

のFileInputStreamはのパスにファイルの相対を検索します実行。リソースファイルは、クラスと同じフォルダにある場合は、あなたが使用して試すことができます:

InputStream stream = this.getClass().getResourceAsStream("ldaplookup.ini"); 
+0

ありがとう、これはトリックでした。 –

+3

このメソッドは、クラスがjarファイルの中にあるときにも機能するので、IDEでもデプロイしても同じです。 –

+0

そこのヒントのためにありがとうアンドレ、これについて考えていた –

5

Javaは相対パスの現在の作業ディレクトリからファイルを読み込みます。あなたが何であるかを確認したい場合は、これを試してみてください。

System.out.println(System.getProperty("user.dir")); 
+0

おかげで、これはCを示している:\ WINDOWS \をSystem32。私にはちょっと奇妙に思える。ファイルを探している場所を変更する方法はありますか?私のiniファイルへの絶対パスを入れればよいでしょうか? –

+2

実際、あなたが配布しようとしている実際のプログラムでは、相対パスを使いたいと思っています。どのように(コマンドライン、IDEなど)呼び出すのですか? – AdamC

+0

これは、WebページからPostメソッドによって呼び出されるWebサーバー上でホストされるサーブレットです。 –

5

new FileInputStream("ldaplookup.ini");」は「new FileInputStream("./ldaplookup.ini");」に相当するので、あなたが試みることができる:

System.out.println(new File(".").getAbsolutePath()); 
3

あなたのクラスと一緒に配布されたファイルを読むためにはるかに信頼性の高い方法でClass.getResourceAsStream()を使用することです - それは、ディレクトリになりますあなたが呼んでいるクラスが置かれているクラスパスにあり、すべてがJARファイルにパッケージ化されている場合でも動作します。

1

ない直接の回答が、役に立つ代替:

代わりresource bundleを使用することができます。

rename ldaplookup.ini to ldaploopup.properties 

し、それをロードします。other strategies間.propertiesファイルのクラスパス内

ResourceBundle bundle = ResourceBundle.getBundle("ldaplookup"); 


String s = bundle.getString("url"); 

のResourceBundle検索。

等など

P.S.

(前に示唆したように:)あなたのプログラムを試してみるのベースパスであるかを知るために、あなたはClass.getResourceAsStream()メソッドの代わりに使用する必要があります

System.out.println(new File("."));