Java Properties.store正在删除其他条目

时间:2013-08-22 14:27:03

标签: java configuration-files

我正在尝试使用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应用程序,虽然我猜这与这里的问题无关。我做错了什么?

3 个答案:

答案 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);