2012-08-17 23 views
0

我有一个包含key:value数据的属性位于不同属性文件中的Map。我来到以下解决方案:当存在最新数据时更新属性文件

//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进行了调查,Strategy在这里看起来不错,但似乎......我甚至认为不应该应用DP,并且有很多微妙而简单的解决方案。但事实上呢?

更新 重构根据布赖恩阿格纳建议或不明。一样。

//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

维护一组属性+它们相应的文件名是怎么回事?如果你把它们封装在一个对象中,那么你只需循环,那个对象就会知道如何更新和写出它自己。

+0

我想我得到了你的建议(见更新):)这看起来更加可取。 – Dragon 2012-08-17 09:09:25

+0

更好的是,虽然我会更深入地将Map 包装到一个对象中,并直接调用它。虽然看起来不错! – 2012-08-17 09:15:57

相关问题