デフォルトパッケージ内にあるプロパティファイルがあり、プロパティファイルを使用しているクラスも同じデフォルトパッケージにあります。パスなしでファイル名のみを使用すると、エラーが発生します。 tatファイルを参照するために何らかのパスを指定する必要があるため、明らかにそれは正しくありません。アプリケーションをビルドしてjarファイルとして作成するので、プロパティファイルがそのjarファイル内に入るようにパスを指定するにはどうすればよいですか。 Netbeans IDEを使用しています。
編集
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);
}
getClass().getResourceAsStream("foo.properties")
を使用します
ただし、デフォルトのパッケージを使用することはお勧めしません(上記はすべてのパッケージで機能します)。
FileInputStream(..)
は現在のユーザーディレクトリからの相対パスを使用しているため、コードは機能しません(_Java.io.File
_のドキュメントを参照)。したがって、_foo.properties
_または_/home/usr/
_で_c:\documents and settings\usr
_を検索します。 _.properties
_ファイルはクラスパス上にあるため、そのように読み取ることができます-Class.getResourceAsStream(..)
メソッドを使用してください。
他の人が示したように、jarからロードできるようにする場合は、ファイルとしてではなくクラスパスからロードする必要があります。 Class.getResourceAsStream() メソッドまたは ClassLoader.getResourceAsStream() メソッドが必要です。ただし、getClass().getResourceAsStream("pos_config.properties")
の使用は危険です。指定されたクラスに関連して解決されるパスを使用しているため、サブクラスが解決先の場所を変更する可能性があるためです。したがって、jar内で絶対パスを指定するのが最も安全です。
getClass().getResourceAsStream("/pos_config.properties")
さらに良いことに、getClass()の代わりにクラスリテラルを使用します。
Foo.class.getResourceAsStream("pos_config.properties")
現在の作業ディレクトリからプロパティファイルを取得しようとしていますか、それともリソースとして取得しようとしていますか?使用する必要があるようです。
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);
}
とにかく、すべてのプロパティファイルをリソースフォルダーに配置することをお勧めします。
Eclipseでは、以下を使用してソースフォルダーを作成できます。
右クリック->新規->ソースフォルダ
ネットビーンズにも似たようなものがあるに違いない。すべてのプロパティファイルをそこに配置します。後で、次のコードでそれらにアクセスできます。
AnyClass.class.getResource("/image.png")
したがって、特定の問題については、次のようにアクセスします。
pro.load(new FileInputStream(YourClass.class.getResource("/pos_config.properties")));
私が使用する静的メソッドでは
ClassLoader.getSystemResourceAsStream( "name.properties");
これはコンパイルされません:
pro.load(new FileInputStream(YourClass.class.getResource("/pos_config.properties")));
適切な使用:
pro.load(YourClass.class.getResourceAsStream("/pos_config.properties")));