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

Java Properties.store正在删除其他条目,java,configuration-files,Java,Configuration Files,我正在尝试使用属性修改Java中的配置文件。我尝试修改多个条目中的两个,如下所示: Properties properties = new Properties(); FileInputStream fin = null; FileOutputStream fout = null; fin = new FileInputStream(mCallback.getConfFile()); fout = new FileOutputStream(mCallback.getConfFile());

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

来自:

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

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

此文件的默认值表中的属性 属性表(如果有)未通过此方法写入

此方法在中输出注释、属性键和值 与store(Writer)中指定的格式相同,如下所示 差异:

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

       Properties prop =new Properties();
       prop.load(new FileInputStream(filename));
       prop.setProperty(key, value);
       prop.store(new FileOutputStream(filename),null);
发件人:

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

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

此文件的默认值表中的属性 属性表(如果有)未通过此方法写入

此方法在中输出注释、属性键和值 与store(Writer)中指定的格式相同,如下所示 差异:

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

       Properties prop =new Properties();
       prop.load(new FileInputStream(filename));
       prop.setProperty(key, value);
       prop.store(new FileOutputStream(filename),null);

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

编辑:

交换这两个语句-

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

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

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

编辑:

交换这两个语句-

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

您应该先加载,然后再创建同名文件。

之前的海报有点正确,只是不在正确的位置

加载属性后,需要打开
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);

上一张海报是对的,只是不在正确的地方

加载属性后,需要打开
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);

嗯。。。在创建具有相同路径的新FileOutputStream之前,请尝试加载。可能FileOutputStream会截断文件。mmmhh。。。在创建具有相同路径的新FileOutputStream之前,请尝试加载。可能FileOutputStream会截断该文件。您回答的是描述OP当前正在执行的操作<代码>加载()读取属性
setProperty()
更改他们想要的属性
store()
将所有属性写入文件。这并不能解释问题或给出解决方案。@SotiriosDelimanolis编辑。问题中的“我发现整个文件都被覆盖了”让我觉得OP希望在不创建新文件的情况下进行修改。谢谢你们的回答。Sajal我接受另一个,因为它更清楚地表明问题在于何时打开输出流+1.你想投票吗more@quinestor我完全同意。谢谢。你的回答是描述OP目前正在做什么<代码>加载()读取属性
setProperty()
更改他们想要的属性
store()
将所有属性写入文件。这并不能解释问题或给出解决方案。@SotiriosDelimanolis编辑。问题中的“我发现整个文件都被覆盖了”让我觉得OP希望在不创建新文件的情况下进行修改。谢谢你们的回答。Sajal我接受另一个,因为它更清楚地表明问题在于何时打开输出流+1.你想投票吗more@quinestor我完全同意。谢谢