2

Java でアプリケーション レベルのプロパティを格納およびロードする最良の方法は何ですか。

app.configに何かを入れるだけの.netに似たものはありますか

 <appSettings>
    <add key="emailAddress" value="me@example.com" />
  </appSettings>

そして、次のように取得します。

string AdminEmail = ConfigurationManager.AppSettings["emailAddress"];

プロパティ ファイルをファイル ストリームなどにロードする必要がありますか? 不要な作業のようです。

私はこれを試しました:

Properties props = new Properties();

FileInputStream fis = new FileInputStream("myProps.properties");
props.load(fis);
fis.close();

しかし、これにより java.io.FileNotFoundException 例外が発生します。プロパティ ファイルは、クラスに関連してどこに移動する必要がありますか?

4

6 に答える 6

4

Preferences APIは、この機能を提供します。多くの疣贅がありますが、OSに依存しない方法でこれを実行しようとしている場合、これが標準のJavaランタイムライブラリを使用してこれを実現する唯一の方法です。もちろん、ニーズに合わせて独自のOS固有のコードをいつでも作成できます。はい、プロパティファイルをロードする簡単なコードを記述できますが、そのファイルの場所が複数のオペレーティングシステムで問題になる可能性があります。あなたはJavaでデスクトップアプリを書いているので、OSの移植性に関心があると思います。そうしないと、Javaがデスクトップアプリに最適な選択ではない可能性があります。

于 2010-01-20T17:57:03.043 に答える
2

そのように FileInputStream を使用する場合、パスは OS の現在のディレクトリ (通常は起動ディレクトリ) からの相対パスになります。

代わりに Java 組み込みのリソース メカニズムを使用する場合 ( APIで説明されているように、getResourceAsStream() など)、パスはクラスの場所に相対的になります。このアプローチを使用すると、jar 内からリソースをロードしたり、ネットワーク経由でリソースをロードしたりすることもできます (たとえば、アプレットの場合)。使用される概念は、Java 用語で「クラスパス」と呼ばれる一種の仮想ファイルシステムです。もう少し詳しく説明しているdevxの記事があります。

要するに、この種のコードはうまく機能します。

Properties prop = new Properties();
//with properties in the same dir as current class
prop.load(getClass().getResourceAsStream("my.properties")); 
//with properties in the root dir of your jar, or in base of classpath
prop.load(getClass().getResourceAsStream("/my.properties"));

エラー処理を追加する必要があります...

于 2010-01-20T17:46:52.503 に答える
1

通常、アプリケーションの現在のディレクトリからロードしようとしますが、これは実行方法によって異なります。次のようにして、実行時にこれを判断できるはずです。

String currentFolder = System.getProperty("user.dir");
于 2010-01-20T17:46:07.120 に答える
0

プロパティはResourceBundleで使用できます。これをアプリケーションで使用して、ラベル、ボタン、メッセージをさまざまな言語で保存します

まず、 test.propertiesのようなプロパティファイルを作成します。それはテキストファイルであり、その中にあなたはこのようにあなたの情報を入れます:

propertyname=value

あなたの場合

emailAddress=me@example.com
email2=blablabla@example.com

等々...

コードでこのプロパティを取得するには、プロパティファイルの名前を使用してResourceBundleオブジェクトを作成し、プロパティを呼び出します。

ResourceBundle rb = ResourceBundle.getBundle("test");

プロパティファイルから特定の値を取得するには、ResourceBundleを呼び出すだけです。

String value = rb.getString("emailAddress");

このように、Stringという名前の値には、test.propertiesファイルにある「emailAddress」という名前のプロパティの値が含まれます。

String value2 = rb.getString("email2");

同様に、value2という名前の文字列には、test.propertiesファイルにある「email2」という名前のプロパティの値が含まれています。

于 2010-01-20T17:56:36.910 に答える
0

絶対パスを指定しない場合は、現在のパスが選択されます。

それはまさにあなたが尋ねたものではありませんが、構成として XML ファイルを使用したい場合は、Apache Commons Configurationを参照してください。

于 2010-01-20T18:00:35.590 に答える
0

その場合に検索するファイル パスは、Java アプリケーションを起動した場所からの相対パスです。これは、メイン クラスや jar ファイルがある場所ではなく、Java を呼び出した場所です。Java を呼び出すスクリプトを使用してアプリケーションを開始する場合、それはそのディレクトリです。

たとえば、アプリケーションが jar ファイル「app.jar」にバンドルされているとします。「myProps.properties」を同じディレクトリに置き、そのディレクトリから「java -jar app.jar」を実行します。そのようにプロパティファイルを見つける必要があります。

于 2010-01-20T17:43:56.330 に答える