2013-10-28 33 views
5

私はEclipseで動的Webプロジェクトを開発しています。ストアデータベースの詳細(ユーザー名、パスワードなど)用の.propertiesファイルを作成しました。プロジェクトを右クリックし、New-> Fileをクリックして追加しました。私は、JavaのutilパッケージのPropertiesクラスを使用しました。しかし、それは動作しません。ファイルからプロパティを取得できません。ここで私が使用したコードは、Eclipse Java動的Webプロジェクトで.propertiesファイルを使用する方法

Properties prop = new Properties(); 


    try { 

     prop.load(new FileInputStream("database.properties")); 


      String db = prop.getProperty("database"); 
     String userName = prop.getProperty("dbuser"); 
     String password = prop.getProperty("dbpassword"); 

    } catch (IOException ex) { 
     ex.printStackTrace(); 
    } 

は、何か問題があるのか​​、私はプロパティファイルを置く必要があり、特定の場所があります。

+0

をリンク - 検索しようとして問題があるようですdatabase.properties。それはどこにありますか?あなたのクラスと同じパッケージに入っていますか? – alicia

答えて

5

あなたがしたことは正しいです、つまり、プロジェクトとnew--fileを右クリックすることです。自分のjvmを始める場所にプロパティを置く必要があります。添付の画像をご覧ください。プロパティファイルは赤でマークされています。あなたのプロパティファイルもこのような場所にあるかどうかを調べます。 はまた、あなたのファイルを配置する場所を見つけるためにあなたのコードでこれを追加します。詳細については

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

に従ってください。これはFileNotFoundException when using java properties file

enter image description here

+2

ええ!私はちょうど私が与えたパスがEclipseフォルダを参照していることを発見しました。私はイメージをチェックしました。そこにあなたの絶対パスを使用しています。プロパティファイル。しかし、私は私のプロジェクトをホストするときに、それがうまくいかないところ(絶対パスを与える)になります。私はちょうどそこにある標準的な方法を知りたい.propertiesファイルとそれにアクセスします。ありがとうございました! – Dilma

+1

これはプロパティファイルを使用する正しい方法ではありません。絶対パスを使用することはお勧めしません。ファイルがC:\\ a.propertiesにあり、フルパスを使用していて、明日linuxにWARをデプロイすると、これは動作しません。 Nitindの答えを参照してください – Oliver

1

proprtyファイルへの絶対パスまたは相対パスを指定してください。また、このproperyファイルパスがソースフォルダに追加されているかどうかを確認してください。そうでなければ、クラスフォルダにコピーされません。 (プロジェクトを右cclick、[ソース]タブの下でJavaのビルド・パスを確認してください。

4

あなたが代わりにjavax.servlet.ServletContext#getResourceAsStream(String)の結果でより多くのポータブルjava.util.Properties#load(InputStream)を使用する必要があります。

+2

これは正しい方法です。このファイルをMavenプロジェクトの{YourApp} \ src \ main \ resourcesに配置する必要があります。そして、WebContent以外の動的Webプロジェクト – Oliver

1

あなたはクラスと同じパッケージにの.propertiesファイルを持っている必要がありますそれはそれを使用しています。

orベターを、プロパティが(そうでなければ、あとでの.warアーカイブ内のファイルを持っていますとき、いくつかの問題を持つことができます)getResourceAsStream方法でファイルを読み込む。

InputStream inputStream = 
    getClass().getClassLoader().getResourceAsStream("database.properties"); 
4

通常、プロパティファイルがプロジェクトランタイムのクラスパスにあることを確認します(例:その後、WEB-INF /クラス)とシステムクラスローダまたはプロパティファイルハンドラのクラスローダ、すなわち(メモリからフリーハンド入力のいずれかを使用してそれを読み込む - )

try{ 
    Properties p = new Properties(); 
    InputStream in = MyPropertyHandler.getClass() 
      .getClassLoader() 
      .getResourceAsStream("com/package/props/database.properties"); 
    p.load(in); 
catch(IOException e){ 
    e.printStackTrace(System.err); 
} 

をコンパイルされていない、私は賭けている、あなたはそうではありません正しい場所を指しています。プロパティファイルが正しい場所にあることを確認してください。そのコードを使用して、私は${CURRENT_WORKING_DIR}/database.propertiesを探していると信じています。これは、日食のWebアプリケーションの場合ですWEB-INF/classes(私は思う)です。

+0

でWebContentの下で!私はちょうど私が与えたパスがEclipseフォルダーを参照していることがわかりました。つまり、.propertiesファイルを使用するクラスのパッケージに.propertiesファイルを保存する必要がありますか? – Dilma

+0

@Dilma:それは厳密には必要ではありません。どこにでも置くことができますが、実行時のクラスパスにあることを確認するのが最も簡単です(より良い方法です)。ソースフォルダ(リソースフォルダ(extフォルダなど))として宣言された場所である必要はありません。 – MadConan

関連する問題