1

我正在尝试使用属性修改 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 应用程序,但我想它与这里的问题无关。我做错了什么?

4

3 回答 3

3

您必须阅读所有属性,然后修改所需的属性。之后,您必须将所有内容写入文件。您不能只进行项目修改。属性 API 不提供要修改的功能。

编辑:

交换这两个语句-

fout  = new FileOutputStream(mCallback.getConfFile());
properties.load(fin);

在创建同名文件之前,您应该先加载。

于 2013-08-22T14:39:33.277 回答
1

属性

公共无效存储(输出流输出,字符串注释)抛出 IOException

将此属性表中的此属性列表(键和元素对)以适合使用 load(InputStream) 方法加载到属性表的格式写入输出 > 流。

此属性表的默认表中的属性(如果有)不会通过此方法写出。

该方法输出注释、属性键和值的格式与 store(Writer) 中指定的格式相同,但有以下区别:

因此, 首先加载数据,然后设置所需的数据,然后将其存储

       Properties prop =new Properties();
       prop.load(new FileInputStream(filename));
       prop.setProperty(key, value);
       prop.store(new FileOutputStream(filename),null);
于 2013-08-22T14:29:54.890 回答
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);
于 2013-08-22T14:40:32.673 回答