Java Properties.store正在删除其他条目
我正在尝试使用属性修改Java中的配置文件。我尝试修改多个条目中的两个,如下所示: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());
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我完全同意。谢谢