2011-08-04 24 views
2

Eclipseで動的Webプロジェクトを作成し、プロパティファイルから読み込むための簡単なコードを記述しました。ここ
は私のコードは、私がこれを実行すると、私は、ファイルの例外が見つかりませんしまったプロパティファイルから値を読み取る

public class AutocompleteService { 

public static void main (String args[]) 
{ 
    Properties properties = new Properties(); 
    properties.load(new FileInputStream("autocomplete.properties")); 
    System.out.println("Test : " + properties.getProperty("test")); 
} 

です。

java.io.FileNotFoundException: autocomplete.properties (The system cannot find the file specified) 

私のパッケージ構造は

-src 
- com.serive (package) 
    - AutocompleteService.java 
    - autocomplete.properties 

両方AutocompleteService.java以下の通りであるとautocomplete.propertiesたちは、プロパティ・ファイルからの読み取りに何かする必要があり、すなわちcom.service .doという同じパッケージに含まれていますか?

参考:http://www.exampledepot.com/egs/java.util/Props.html

〜Ajinkya。

答えて

5

は、あなたのクラスにストリーム相対を取得します。

AutocompleteService.class.getResourceAsStream("autocomplete.properties") 
+0

ありがとう:)それは働いて、他のものよりも複雑ではありません。:) – xyz

+0

は 'getResourceAsStream'でなければなりません。 – Thilo

+0

@Thilo:はい、そうです。私は 'properties.load(AutocompleteService.class.getResourceAsStream(" autocomplete.properties "));' – xyz

7

あなたはクラスパスからこれをロードする必要があります:あなたはストリームを持っている場合は元

ClassLoader loader = Thread.currentThread().getContextClassLoader(); 
stream = loader.getResourceAsStream(fileName); 

あなたはは、Properties.loadにそれを渡すことができます()

2

あなたのコードは、「カレントディレクトリ」で募集していますアプリケーションが実行されたとき。

Class.getResourceAsStream()を使用すると、クラスと同じ場所から読み取ることができます。

+0

だから 'com.service'は私の現在のディレクトリではありませんか? – xyz

+0

いいえ、どのようにアプリケーションを起動しているかによって異なります。通常、Eclipseで作業するときはワークスペースディレクトリになります。これは、Run Configuration、Argumentsタブで制御できます。しかし、アプリケーションをスタンドアロンで実行すると、おそらくアプリケーションがJARにあるため、クラスディレクトリが現在のディレクトリであるとは限りません。 getResourceAsStream()を使用すると、Eclipse内でスタンドアロンで作業します。 – djna

0

相対パスを使用して入力ストリームを作成すると、実行中のプログラムの現在のディレクトリ内のファイルを開こうとします。あなたのケースでは、現在のディレクトリは、サーブレットコンテナ(Tomcat、Jettyなど)の実行ディレクトリです。

あなたがしたいのは、戦争中にクラスに沿って配置されたプロパティファイルを開くことですファイル。したがって、このプロパティファイルはクラスローダによってラップされ、Class.getResourceAsStream()を使用するのが適切な方法です。リンクされたjavadocを見て、どの種類のパスを引数として提供するかを理解してください。

2

「現在の」ディレクトリは、サーバーを起動した場所です。そのファイルを参考にしてください(例:"config/autocomplete.properties"など)。

をご存知の方は、の問題があります。

File propertiesFile = new File("config/autocomplete.properties"); 
if (!propertiesFile.exists()) 
    throw new IllegalStateException("Could not find properties file: " + propertiesFile.getAbsolutePath()); 
properties.load(new FileInputStream(file)); 

これが爆発した場合、それはファイルがあり、かつ迅速に問題を修正する方法を見つけ出すyo'll思うところ、例外メッセージは、あなたが表示されます:あなたは、問題をデバッグするのに役立ちます。このようなコードを使用してください。

関連する問題