0

さまざまなプロパティファイルにあるプロパティのkey:valueデータを含むマップがあります。私は次の解決策に到達しました:

//firstProp - properties file
//FIRST_PROPERTIES_FILE - path to a properties file
public void changeProps(Map<String, String> props) {
    boolean isFirstPropsChanged = false;
    boolean isSecondPropsChanged = false;
    boolean isThirdPropsChanged = false;

    Set<String> keys = props.keySet();
    for(String key : keys) {
        if(firstProp.containsKey(key) && !firstProp.getProperty(key).equals(props.get(key))) {
            firstProp.setProperty(key, props.get(key));
            if(!isDirstPropsChanged) {
                isFirstPropsChanged = true;
            }
        }

        if(secondProp.containsKey(key) && !secondProp.getProperty(key).equals(props.get(key))) {
            secondProp.setProperty(key, props.get(key));
            if(!isSecondPropsChanged) {
                isSecondPropsChanged = true;
            }
        }

        if(thirdProp.containsKey(key) && !thirdProp.getProperty(key).equals(props.get(key))) {
            thirdProp.setProperty(key, props.get(key));
            if(!isThirdPropsChanged) {
                isThirdPropsChanged = true;
            }
        }
    }
    try {
        if(isFirstPropsChanged){
            firstProp.store(new FileOutputStream(FIRST_PROPERTIES_FILE), null);
        }
        if(isSecondPropsChanged) {
            secondProp.store(new FileOutputStream(SECOND_PROPERTIES_FILE), null);
        }
        if(isThirdPropsChanged) {
            thirdProp.store(new FileOutputStream(THIRD_PROPERTIES_FILE), null);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

このソリューションはうまく機能しますが、車椅子のように見えます。さまざまなDPを調べましたが、ここでは戦略は良いように見えましたが、それだけでした... DPを適用するべきではなく、より繊細で単純な解決策があるとさえ思います。しかし、それは実際には何ですか?

BrianAgnewの提案またはsmthに従ってリファクタリングを更新しました。同様に。

//Map<Properties, File> propertiesFileMap - Properties files with File they are located at.
public void changePropsArray(Map<String, String> props) {
    Set<String> keys = props.keySet();
    for(String key : keys) {
        for(Properties prop : propertiesFileMap.keySet()) {
            if(prop.containsKey(key) && !prop.getProperty(key).equals(props.get(key))) {
                prop.setProperty(key, props.get(key));
            }
        }
    }

    try {
        for(Map.Entry<Properties, File> entry : propertiesFileMap.entrySet()) {
            entry.getKey().store(new FileOutputStream(entry.getValue()), null);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}
4

1 に答える 1

4

プロパティの配列とそれに対応するファイル名を維持することはどうですか?これらをオブジェクトにカプセル化する場合は、ループするだけで、そのオブジェクトは自分自身を更新して書き出す方法を認識します。

于 2012-08-17T08:53:08.883 に答える