我正在尝试使用Properties修改Java中的配置文件。我尝试修改这两个条目中的两个:
Properties properties = new Properties();
FileInputStream fin = null;
FileOutputStream fout = null;
fin = new FileInputStream(mCallback.getConfFile());
fout = new FileOutputStream(mCallback.getConfFile());
properties.load(fin);
properties.setProperty(Wrapper.GAME_PATH_KEY, (String)gamePathText.getText());
properties.setProperty(Wrapper.GAME_TYPE_KEY, (String)selectedGame.getSelectedItem());
properties.store(fout, null);
但是当我在结果之后检查文件时,我发现整个文件被覆盖了,只剩下这两个条目。这是一个Android应用程序,虽然我猜这与这里的问题无关。我做错了什么?
答案 0 :(得分:3)
您必须阅读所有属性,然后修改所需的属性。之后,你必须写入所有文件。您不能只修改项目。 Properties API不提供要修改的功能。
修改强>
交换这两个陈述 -
fout = new FileOutputStream(mCallback.getConfFile());
properties.load(fin);
在创建具有相同名称的文件之前,应先加载。
答案 1 :(得分:1)
来自Properties:
public void store(OutputStream out, 字符串评论) 抛出IOException
将此属性表中的此属性列表(键和元素对)写入输出>流中的 格式适合使用的加载到Properties表中 load(InputStream)方法。
默认表中的属性 属性表(如果有)通过此方法未写入。
此方法输出注释,属性键和值 与存储(Writer)中指定的格式相同,具有以下内容 差异:
首先,加载数据,然后设置所需数据,然后存储。
Properties prop =new Properties();
prop.load(new FileInputStream(filename));
prop.setProperty(key, value);
prop.store(new FileOutputStream(filename),null);
答案 2 :(得分:0)
上一张海报是正确的,只是不在正确的地方。
您需要在加载属性后打开FileOutputStream
,否则会清除文件的内容。
Properties properties = new Properties();
FileInputStream fin = null;
FileOutputStream fout = null;
fin = new FileInputStream(mCallback.getConfFile());
// if fout was here, the file would be cleared and reading from it would produce no properties
properties.load(fin);
properties.setProperty(Wrapper.GAME_PATH_KEY, (String)gamePathText.getText());
properties.setProperty(Wrapper.GAME_TYPE_KEY, (String)selectedGame.getSelectedItem());
fout = new FileOutputStream(mCallback.getConfFile());
properties.store(fout, null);