4

実行間でアプリケーションの設定を保存するために、Java クラスのプロパティを使用しようとしています。その後、アプリケーションを実行可能な JAR ファイルにエクスポートし、必要なすべてをこの 1 つのファイルに保持して、移植性を提供したいと考えています。したがって、私のアプリケーションはプロパティ ファイルを見つけてロードし、終了時に新しい設定を保存する必要があります。

読み込みはうまくいきます:

Properties prop = new Properties().load(this.getClass().getResourceAsStream("properties.cfg"));

しかし、保存するには、同じファイルを見つけて上書きする必要があります。メソッド Properties.store() には OutputStream が必要ですが、getResourceAsStream は InputStream を返すため、ファイルを見つけてアクセスできません。

これは、常に *.class ファイルと一緒に配置する必要があります。JAR にエクスポートする前に機能する多くのソリューションを見つけましたが、エクスポート後に機能するソリューションはありません。提案をありがとう。

4

3 に答える 3

8

jar を書き直すことはできません (というか、複雑で良い考えではありません)。

好ましい解決策は、以下からプロパティを読み取ることです。

  1. マシン上のディレクトリ
  2. .jarファイル_

最初は場所 1 にはプロパティ ファイルがなく、ファイルにフォールバックします.jar。プロパティを書き込むときは、それらを指定されたディレクトリに書き込み、次に読み取るときに、この場所からプロパティを読み取ります。これは、再起動などに耐えます。

Apache Commons Configurationなどのライブラリは、この階層化されたプロパティの場所のメカニズムを自動的にサポートするため、独自のソリューションを作成する際の時間や労力を節約できることに注意してください。

于 2012-07-30T08:11:33.000 に答える
0

この種のシナリオでは、プロパティ ファイルをクラスパスに追加し、ResourceBundle などを使用してロードするのが最善の方法です。

private static ResourceBundle _properties = ResourceBundle.getBundle("sample.properties");
String sampleProperty = _properties.getString(propertyKey);

実行方法:

あなたのjarファイルがMyJar.jarで、プロパティファイルがsample.propertiesと呼ばれていると仮定すると、バッチまたはshファイルをその周りに書く必要があります

例: run.sh

java -cp MyJar.jar:conf "Class with main Method"
于 2012-07-30T08:18:53.120 に答える
0

spring の IO インフラストラクチャ (ClasspathResource) を使用する

try {
        ClassPathResource r = new ClassPathResource("bdd.properties");
        Properties properties = new Properties();
        properties.load(r.getInputStream());
    } catch (IOException e) {
        Throwables.propagate(e);
    }

これは本当の単純化です。

于 2012-07-30T08:23:02.367 に答える