2011-07-14 10 views
6

私はデフォルトパッケージの中にあるプロパティファイルを持っており、プロパティファイルを使用しているクラスも同じデフォルトパッケージに入っています。パスを使わずにファイル名だけを使用すると、エラーが発生します。明らかに、私はtatファイルを参照するためにいくつかの種類のパスを与える必要があるので、正しいものではありません。私はアプリケーションをビルドしてjarファイルにします。プロパティファイルがそのjarファイルの中に入るようにパスを与えるべきです。私はNetbeans IDEを使用しています。java内のプロパティファイルのパス

EDIT

Properties pro = new Properties(); 

    try {    
     pro.load(new FileInputStream("pos_config.properties")); 
     pro.setProperty("pos_id", "2"); 
     pro.setProperty("shop_type", "2"); 
     pro.store(new FileOutputStream("pos_config.properties"), null); 
     String pos_id = pro.getProperty("pos_id"); 
     if(pos_id.equals("")){ 
      pos_id="0" ; 
     } 
     global_variables.station_id = Integer.parseInt(pos_id); 
     String shop_type = pro.getProperty("shop_type"); 
     if(shop_type.equals("")){ 
      shop_type="0" ; 
     } 
     global_variables.shop_type = Integer.parseInt(shop_type); 
    } catch (IOException ex) { 
     Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); 
    } 
+0

プロパティファイルにアクセスするために使用しているコードを投稿してください。 – mre

+0

@ little bunny foo foo:私の編集を確認してください.. – Deepak

+0

私はnetbeansを使用しませんが、netbeansのファイルを右クリックすると、 'build path> include'のようになります – talnicolas

答えて

9

使用getClass().getResourceAsStream("foo.properties")

しかし、デフォルトのパッケージを使用することは推奨されていることに注意してください(上記のいずれかのパッケージで動作します)。

FileInputStream(..)は、現在のユーザーディレクトリとの相対パスを使用しているため、コードが機能しません(java.io.Fileのドキュメントを参照)。したがって、それはfoo.properties/home/usr/またはc:\documents and settings\usrに探します。 .propertiesファイルがクラスパス上にあるので、Class.getResourceAsStream(..)メソッドを使用してそれを読むことができます。

4

現在の作業ディレクトリからプロパティファイルを取得しようとしていますか、またはリソースとして取得しようとしていますか?あなたが使うべきであるように聞こえる。

InputStream is = getClass().getResourceAsStream(filename); 
properties.load(is); 

は私の推測では、あなたが本当にこれで欲しいものであるカレントディレクトリ

properties.load(new FileInputStream(filename)); 

からファイルをロードします。

try {    
    Properties pro = new Properties(); 
    pro.load(new FileInputStream("pos_config.properties")); 
    String pos_id = pro.getProperty("pos_id"); 
    try { 
     global_variables.station_id = Integer.parseInt(pos_id); 
    } catch(Exception e) { 
     global_variables.station_id = 0; 
    } 
    String shop_type = pro.getProperty("shop_type"); 
    try { 
     global_variables.shop_type = Integer.parseInt(shop_type); 
    } catch(Exception e) { 
     global_variables.shop_type = 0; 
    } 
} catch (IOException ex) { 
    Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); 
} 
+0

はい現在のディレクトリから取得しようとしています。私は静的なコンテキストmainでこの非静的メソッドを使用できますか? – Deepak

+0

'properties'リファレンスを使用すると、プロパティの非静的メソッドを使用できます。 –

+0

getResourceAsInputStream() - > getResourceAsStream() –

3

すべてのプロパティファイルをリソースフォルダに入れることをお勧めします。

は、Eclipseでは、とのソースフォルダを作成することができます。

右クリック - >新しい - >ソースフォルダ

私はNetBeansで似たものがある賭けます。すべてのプロパティファイルをそこに置きます。他の人が示されているとおり、あなたからそれをロードする必要があり

pro.load(new FileInputStream(YourClass.class.getResource("/pos_config.properties"))); 
6

:あなたはそのようにそれにアクセスする特定の問題のためにそう

AnyClass.class.getResource("/image.png") 

:後で、次のコードでそれらにアクセスすることができますjarファイルからロードできるようにするには、ファイルではなくクラスパスを使用します。 Class.getResourceAsStream()メソッドまたはClassLoader.getResourceAsStream()メソッドが必要です。ただし、getClass().getResourceAsStream("pos_config.properties")を使用すると、指定されたクラスに対して解決されたパスを使用しているため、サブクラスが解決される場所を変更する可能性があるため危険です。

getClass().getResourceAsStream("/pos_config.properties") 

またはより良い、代わりのgetClass()のクラスリテラルを使用します:したがって、それはjarファイル内の絶対パスに名前を付けることが最も安全です

Foo.class.getResourceAsStream("pos_config.properties") 
0

これはコンパイルされません。

pro.load(new FileInputStream(YourClass.class.getResource("/pos_config.properties"))); 

適切な使用:

pro.load(YourClass.class.getResourceAsStream("/pos_config.properties"))); 
2

私が使用する静的メソッドで

ClassLoader.getSystemResourceAsStream( "name.properties");

関連する問題