在做Properties文件修改时,新加的键值对将删除前面所有添加的键值对,在用prop.store()时文件最后保存的是最后一次添加的。 在将文件写入流设置成追加形式时,又变成将所有的键值对添加进文件,不会覆盖key值相同的键值对,请问下,我这个问题怎么解决呢? 我想对properties文件进行修改和对键所对应的值进行修改而不影响其他的值。
FileOutputStream w = null;
try {
w = new FileOutputStream(SAL_PROP_PATH);
if(null == prop) {
prop = new Properties();
prop.load(new FileInputStream(SAL_PROP_PATH));
}
prop.setProperty(key, value);
prop.store(w, key);
w.flush();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if(null != w) {
w.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}

解决方案 »

  1.   


    newprop.setProperty(key, value);
    newprop.load(in);
    output注意顺序即可
      

  2.   

    不行啊,properties要写入的话必须要有个写入流
    你能在操作步骤上写具体点吗?
      

  3.   

    把w = new FileOutputStream(SAL_PROP_PATH);
    移到prop.load(new FileInputStream(SAL_PROP_PATH));
    与prop.setProperty(key, value);之间即可
      

  4.   

       没太看懂你题目的意思。如果是重复的key你不想被覆盖,那不可能,因为properties对象就是Map。即使你用properties的editor也会发现出现重复的key会报错。如果你知道想不将内存中修改的properties值保存到load的文件中,那么你只要不stroe就可以了。
    properties只是提供了同步方法,但你完全可以不使用它。