2012-04-06 21 views
0

プロパティファイルを読み込もうとしています。
私はそれをロードしようとしているクラスと同じディレクトリの中にプロパティファイルを持っています。
例:
Java:プロパティファイルを読み込めません。どうして?

package com.classes.internal; 
public class ClassA { 

    private static String PFILE = "config.properties"; 


    private static void methodA(){ 
    //do stuff 
     Properties properties = null; 
     try{ 
      properties = new Properties(); 
      properties.load(new FileInputStream(PFILE)); 
      //properties.load(new ClassA().getClass().getResourceAsStream(PFILE)); --> Does not work either 

     }catch(Exception e){ 
      e.printStackTrace(); 
     } 


    } 

またconfig.propertiesファイルは、\コム\クラスである内部DIR

しかし、私は取得FileNotFoundExceptionまたはjava.lang.NullPointerException(もし代わりに、最初のコメントアウトライン使用)

を何私はここで間違っていますか?私は何を忘れていますか?

+0

を - アプリケーションを構築するには、それはあなたがその後、プロパティファイルにアクセスするには、次のコードを使用することができます/WEB-INF/classes/config/config.properties

に行きますあなたのクラスパス? –

+0

これは 'ClassA'と同じディレクトリにあります – Jim

+0

似たような質問:http://stackoverflow.com/questions/7688710/scanner-no-line-found-exception/7689102#7689102 – Sorin

答えて

2

ファイルは、実行中のディレクトリに存在する必要があります。クラスファイルが存在するディレクトリではありません。だから、

ディレクトリ構造

プロジェクト/ COM /クラス/内部を持っているとあなたはあなたのJVMは、「設定を探しますコマンド

Project$ java com.classes.internal.SomeClass 

を実行する場合.properties "ファイルを" Project "ディレクトリにコピーします。

+0

私はこれを理解しているか分かりません。しかし'getClass()。getResourceAsStream'などの意味は何ですか? – Jim

+0

'getClass()。getResourceAsStream'は、現在のクラスのソースファイルが格納されているフォルダ内のファイルを探しています。前述のように 'config.properties'ファイルをフォルダに置いて、' System.out.println(new ClassA()。getClass()。getResourceAsStream( "config.properties"));を実行してみてください。 – mtk

0

あなたのプログラム作業ディレクトリはcom \ classes \ internalにないと思います。この相対パスを渡すようにしてください:

com\classes\internal\config.properties 

絶対パス。 あなたは、以下の行がFrankieTheKneeMan例では(作業ディレクトリにファイルを相対ロードします。この

String currentDir = new File(".").getAbsolutePath(); 
0
properties.load(this.getClass().getResourceAsStream(
    "/com/classes/internal/" + PFILE)); 
+0

'this'はありません。私は' static'メソッド – Jim

+0

です。以前のフォームを使用したときに、変更された位置文字列を使用したときはどうでしたか?私は20の質問をする気分ではないことに注意してください。答えが出されたときに少しのイニシアチブを使うのが賢明です。 –

0

のような現在の作業ディレクトリを取得することができ、「プロジェクト」フォルダ。あなたがTomcatの中で、あなたのコードを実行している場合は、それを

そして、以下の行については、クラスパスに関連してファイルをロードしています。したがって、 "config.properties"は "com/classes/internal /"ではなく "com"フォルダを含むディレクトリを指します。

properties.load(new ClassA().getClass().getResourceAsStream(PFILE)); 

したがって、クラスパスからロードするか、作業ディレクトリからロードするかを決定する必要があります。

+0

私は2番目のオプションを試したが、うまくいかなかった – Jim

0

例。私は日食プロジェクト構造を使用しています、私はあなたが、とにかく絵を願っています:

//File in Project/src/com/classes/internal/config.properties 
InputStream in = ClassA.class.getResourceAsStream("config.properties"); 
Properties p = new Properties(); 
try { 
    p.load(in); 
} catch(IOException e) { 
    e.printStackTrace(); 
} 

をする場合には、パッケージの外にあなたのファイルを置くことを決定:getResourceAsStreamファイルが含まれなければなら

//File in Project/src/config.properties 
InputStream in = ClassA.class.getClassLoader().getResourceAsStream("config.properties"); 

に留意されたいです。あなたのクラスパス。

0

は直接ソースフォルダに設定パッケージを作成し、それにconfig.propertiesファイルを配置します。プロパティがに対するファイルです

Properties prop = new Properties(); 
    String propFileName = "/config/config.properties"; 

    InputStream input = null; 

    input = ClassA.class.getResourceAsStream(propFileName); 
    prop.load(input); 
関連する問題