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();
}
}
我想我得到了你的建议(见更新):)这看起来更加可取。 – Dragon 2012-08-17 09:09:25
更好的是,虽然我会更深入地将Map包装到一个对象中,并直接调用它。虽然看起来不错! –
2012-08-17 09:15:57