web-dev-qa-db-ja.com

java内のプロパティファイルのパス

デフォルトパッケージ内にあるプロパティファイルがあり、プロパティファイルを使用しているクラスも同じデフォルトパッケージにあります。パスなしでファイル名のみを使用すると、エラーが発生します。 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);
    }
9
Deepak

getClass().getResourceAsStream("foo.properties")を使用します

ただし、デフォルトのパッケージを使用することはお勧めしません(上記はすべてのパッケージで機能します)。

FileInputStream(..)は現在のユーザーディレクトリからの相対パスを使用しているため、コードは機能しません(_Java.io.File_のドキュメントを参照)。したがって、_foo.properties_または_/home/usr/_で_c:\documents and settings\usr_を検索します。 _.properties_ファイルはクラスパス上にあるため、そのように読み取ることができます-Class.getResourceAsStream(..)メソッドを使用してください。

9
Bozho

他の人が示したように、jarからロードできるようにする場合は、ファイルとしてではなくクラスパスからロードする必要があります。 Class.getResourceAsStream() メソッドまたは ClassLoader.getResourceAsStream() メソッドが必要です。ただし、getClass().getResourceAsStream("pos_config.properties")の使用は危険です。指定されたクラスに関連して解決されるパスを使用しているため、サブクラスが解決先の場所を変更する可能性があるためです。したがって、jar内で絶対パスを指定するのが最も安全です。

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

さらに良いことに、getClass()の代わりにクラスリテラルを使用します。

Foo.class.getResourceAsStream("pos_config.properties")
6
Ryan Stewart

現在の作業ディレクトリからプロパティファイルを取得しようとしていますか、それともリソースとして取得しようとしていますか?使用する必要があるようです。

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);
}
5
Peter Lawrey

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

Eclipseでは、以下を使用してソースフォルダーを作成できます。

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

ネットビーンズにも似たようなものがあるに違いない。すべてのプロパティファイルをそこに配置します。後で、次のコードでそれらにアクセスできます。

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

したがって、特定の問題については、次のようにアクセスします。

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

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

ClassLoader.getSystemResourceAsStream( "name.properties");

2
Nikolay Frick

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

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

適切な使用:

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