Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如果存在';更新最新数据_Java_Design Patterns - Fatal编程技术网

Java 如果存在';更新最新数据

Java 如果存在';更新最新数据,java,design-patterns,Java,Design Patterns,我有一个包含不同属性文件中属性的key:value数据的映射。我得出了以下解决方案: //firstProp - properties file //FIRST_PROPERTIES_FILE - path to a properties file public void changeProps(Map<String, String> props) { boolean isFirstPropsChanged = false; boolean isSecondProps

我有一个包含不同属性文件中属性的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();
    }
}
//firstProp-属性文件
//第一个属性文件-属性文件的路径
公共无效更改道具(地图道具){
布尔值isFirstPropsChanged=false;
布尔值isSecondPropsChanged=false;
布尔值isThirdPropsChanged=false;
Set keys=props.keySet();
用于(字符串键:键){
if(firstProp.containsKey(key)&&!firstProp.getProperty(key).equals(props.get(key))){
firstProp.setProperty(key,props.get(key));
如果(!isDirstPropsChanged){
isFirstPropsChanged=真;
}
}
if(secondProp.containsKey(key)&&!secondProp.getProperty(key).equals(props.get(key))){
secondProp.setProperty(key,props.get(key));
如果(!isSecondPropsChanged){
isSecondPropsChanged=真;
}
}
if(thirdrop.containsKey(key)和&!thirdrop.getProperty(key).equals(props.get(key))){
thirdrop.setProperty(key,props.get(key));
如果(!isThirdPropsChanged){
isThirdPropsChanged=真;
}
}
}
试一试{
如果(isFirstPropsChanged){
store(新文件输出流(第一个属性文件),null);
}
如果(isSecondPropsChanged){
store(新文件输出流(第二个属性文件),null);
}
如果(isThirdPropsChanged){
存储(新文件输出流(第三个属性文件),null);
}
}捕获(例外e){
e、 printStackTrace();
}
}
这个解决方案很有效,但看起来像是轮椅。我查看了不同的DPs,这里的策略似乎很好,但它只是看起来。。。我甚至认为不应该应用DP,还有更微妙更简单的解决方案。但事实上是什么呢

已更新 根据Brian Agnew建议或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();
    }
}
//映射属性FileMap-属性文件及其所在的文件。
公共作废更改道具(地图道具){
Set keys=props.keySet();
用于(字符串键:键){
对于(Properties prop:propertiesFileMap.keySet()){
if(prop.containsKey(key)和&!prop.getProperty(key).equals(props.get(key))){
prop.setProperty(key,props.get(key));
}
}
}
试一试{
对于(Map.Entry:propertiesFileMap.entrySet()){
entry.getKey().store(新文件输出流(entry.getValue()),null);
}
}捕获(例外e){
e、 printStackTrace();
}
}

维护属性数组及其相应的文件名有什么问题?如果您将这些内容封装在一个对象中,那么您只需在其中循环,该对象就会知道如何更新并写出自己。

维护属性数组及其相应的文件名有什么问题?如果你把它们封装在一个对象中,那么你只需循环,这个对象就会知道如何更新和写出它自己。

我想我得到了你的建议(参见更新):)这看起来更可取。这样更好,尽管我会更进一步,将映射包装成一个对象,并直接调用对象上的方法。不过看起来不错!我想我得到了你的建议(见更新):)这看起来更可取。那更好,尽管我会更进一步,将映射包装成一个对象,并直接调用该对象上的方法。不过看起来不错!