21

Javaでロードされたプロパティをスタックすることは可能ですか? たとえば、次のことができます。

Properties properties = new Properties();

properties.load(new FileInputStream("file1.properties"));
properties.load(new FileInputStream("file2.properties"));

両方からプロパティにアクセスしますか?

4

6 に答える 6

40

あなたはこれを行うことができます:

Properties properties = new Properties();

properties.load(new FileInputStream("file1.properties"));

Properties properties2 = new Properties();
properties2.load(new FileInputStream("file2.properties"));

properties.putAll(properties2);

注 : 維持されるすべてのキーは一意です。したがって、同じキーでロードされた後のプロパティはオーバーライドされます。参照用に保管してください:)

于 2012-04-16T20:31:12.337 に答える
11

はい、プロパティスタック。各キーと値のペアをProperties拡張Hashtableしてload()単純に呼び出します。put()

ソースからの関連コード:

String key = loadConvert(lr.lineBuf, 0, keyLen, convtBuf); 
String value = loadConvert(lr.lineBuf, valueStart, limit - valueStart, convtBuf); 
put(key, value); 

つまり、ファイルからロードしても、現在のエントリはクリアされません。ただし、2 つのファイルに同じキーのエントリが含まれている場合、最初のファイルが上書きされることに注意してください。

于 2012-04-16T20:33:45.733 に答える
3

実はそうです。あなたはこれを行うことができます。プロパティのいずれかが重複する場合、読み込まれた新しいプロパティが古いプロパティに取って代わります。

于 2012-04-16T20:35:02.753 に答える
2

はい、コンストラクターでデフォルトのプロパティ ファイルを渡す必要があります。このように、それらを連鎖させることができます。

例えば:

Properties properties1 = new Properties();
try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream("file1.properties"))){
    properties1.load(bis);
}

Properties properties2 = new Properties(properties1);
try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream("file2.properties"))){
    properties2.load(bis);
}
于 2012-04-16T20:37:08.223 に答える
1

これも機能するはずです。file1.properties と file2.properties に同じプロパティが定義されている場合、file2.properties のプロパティが有効になります。

    Properties properties = new Properties();
    properties.load(new FileInputStream("file1.properties"));
    properties.load(new FileInputStream("file2.properties"));

これで、プロパティ マップには両方のファイルのプロパティが含まれます。file1 と file2 に同じキーが表示される場合、file1 の次に file2 を呼び出しているため、file1 のキーの値が file2 の値を持つプロパティで更新されます。

于 2014-05-22T15:20:27.003 に答える
1

不確定な数のファイルを操作して、これをもう少し動的に行うことができます。

このメソッドのパラメーターは、プロパティ ファイルへのパスを含むリストである必要があります。メソッドを静的にし、他のメッセージ処理関連関数を含むクラスに配置し、必要なときに呼び出すだけです。

public static Properties loadPropertiesFiles(LinkedList<String> files) {
    try {
        Properties properties = new Properties();

                for(String f:files) {
                    Resource resource = new ClassPathResource( f );
                    Properties tempProp = PropertiesLoaderUtils.loadProperties(resource);
                    properties.putAll(tempProp);
                }
                return properties;
    }
    catch(IOException ioe) {
                return new Properties();
    }
}
于 2016-12-16T15:51:26.050 に答える