0

2 つのプロパティ ファイルがあります。

application.properties config.properties

これらのフィールドには両方ともプロパティが含まれています。

IBM Websphere サーバーでシステム プロパティを設定して、これらのフィールドのプロパティをロードしています。

アプリケーションの起動時に、これらの両方のファイルのすべてのプロパティがApplicationProperty.javaクラスを通じて読み込まれます。

private static Properties applicationProperties = new Properties();

 readPropertyFileOne(...){  
properties.load(new FileInputStream(propertiesLocationOne));
}

readPropertyFileTwo(...){  
    properties.load(new FileInputStream(propertiesLocationTwo));
}

アプリケーションが起動したら、両方のファイルのすべてのプロパティを読み取ります。このコードを使用してファイル内のプロパティにアクセスしようとした場合

findNonNullableProperty(String aPropertyName){
        String value = properties.getProperty(aPropertyName);
        if(value == null){
        //print system property name here. Name can be propertiesLocationOne or propertiesLocationTwo. But what is that? I want to know file location.
        }
    }

null を返します。

4

2 に答える 2

1

更新:あなたの質問を再度評価した後、私はこれを理解しています:あなたは独自のプロパティクラスからプロパティ値を取得したいと考えています。プロパティ値が null を返す場合、どのプロパティ ファイルがキーを保持しているかを知り、プロパティ ファイルの名前を出力します。

これに対する答えは、これはできないということです。プロパティ クラスの javadoc を読むと、get("KEY_NAME") メソッドが不明なキーを入力した場合にのみ null を返すことがわかります。空の値の場合は、空の文字列 "" が返されます。キーがわからないため、どちらのファイルにもありません。どちらのファイル名を印刷するかを決めることはできません (または両方を印刷する必要があります)。

空の文字列 ("") に対してこれを行う場合は、独自のプロパティ クラスにさらに情報を追加する必要があります。java.util.Properties クラスは、ハッシュ マップを使用してキーと値のペアを格納します。ファイルからペアをロードした後、ファイルの名前は使用できなくなります。そのため、ファイル名をどこかに保存する必要があります。

次の問題は、2 つのファイルから 1 つのハッシュ マップにキーをロードすることです。テーブル内に入ると、どのファイルから読み取ったかを判断できません。考えられる解決策は次の 2 つです。

  1. ファイル名をキーに追加します。プロパティ ファイル自体でこれを行う場合は簡単ですが、値を取得するにはファイル名を知る必要があります。
  2. ファイルごとに 1 つのプロパティを保持します。その場合、誰かが値を求めたときに両方のプロパティを調べる必要があります。ただし、これは Property クラスでラップできるため、ユーザーはこれを知りません。
于 2012-07-31T06:55:18.470 に答える
0

System クラスからプロパティを取得するだけです。

public class PrintPropery {
    public static void main(String[] args) {
        System.out.println(System.getProperty("app.property"));
    }
}
于 2012-07-31T06:26:54.900 に答える