web-dev-qa-db-ja.com

複数のプロパティファイルの読み込み

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

Properties properties = new Properties();

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

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

18
travega

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

Properties properties = new Properties();

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

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

properties.putAll(properties2);

注:維持されるすべてのキーは一意です。したがって、同じキーでロードされた後のプロパティは上書きされます。あなたの参照のために保つためだけに:)

31
Eugene Retunsky

はい、プロパティスタック。 PropertiesHashtableを拡張します。load()は各キーと値のペアでput()を呼び出すだけです。

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

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

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

8
tskuzzy

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

3
Petr Janeček

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

例えば。:

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);
}
2
Puce

これも機能するはずです。 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の値でプロパティで更新されます。

1
John

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

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

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();
    }
}
1
Mel