A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 蚂蚁搬家 高级黑马   /  2013-5-1 14:50  /  2341 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 蚂蚁搬家 于 2013-5-3 17:27 编辑

代码如下:
//用Properties存取配置文件;
import java.io.*;
import java.util.*;
public class PropertiesDemo
{
public static void main(String [] args) throws IOException
{
  method_2();
}

//将info.txt文件中的键值对信息存入Properties对象中?
public static void method_2() throws IOException
{
  Properties prop = new Properties();
  BufferedReader br = new BufferedReader(new FileReader("info.txt"));
  //流中的数据加载到集合中;
  prop.load(br);
  
  //修改其中一对键值对的值;
  prop.setProperty("zhangkai", "36");
  
  BufferedWriter bw = new BufferedWriter(new FileWriter("info.txt"));
  prop.store(bw, "zhushi");     //修改后的信息重新保存到配置文件中;
  prop.list(System.out);
}
}

我的问题是:将  BufferedWriter bw = new BufferedWriter(new FileWriter("info.txt"))  这一行放到程序前面的输入缓冲流的建立后面时,会出现一个问题:
就是我明明只是修改了其中一对键值对的值("zhangkai", "36");。但实际的运行结果是配置文件中原有的那些键值对都没有了,都被程序中("zhangkai", "36")给覆盖了;
如果程序保持现在这个样子,运行结果就是我想要的:配置文件中原来的"zhangkai=26"被修改为“zhangkai=36”,
这是为何 啊?为什么在一开始就建立输出缓冲流,会导致配置文件被完全覆盖了?

评分

参与人数 1技术分 +1 收起 理由
HM汪磊 + 1

查看全部评分

6 个回复

倒序浏览
你这样做的挺好的,你把IO资源关了会更好
回复 使用道具 举报
如果问题解决,请点编辑,改为已解决,没有请继续追问
回复 使用道具 举报
xiewen 发表于 2013-5-1 16:53
你这样做的挺好的,你把IO资源关了会更好

问题是我刚开始把BufferedReader和BufferedWriter一起建立,结果是配置文件中的4对键值对信息都没了,只有修改后的“zhangkai=36"一对信息,后来我把BufferedWriter的建立写在了后面,就是现在这样子,结果就对了,原来的键值对信息都在,"zhangkai=26"也更改为"zhnagkai=36"了,
这是为何?
回复 使用道具 举报
蚂蚁搬家 发表于 2013-5-2 09:15
问题是我刚开始把BufferedReader和BufferedWriter一起建立,结果是配置文件中的4对键值对信息都没了,只 ...

大哥我也不知道啊!
回复 使用道具 举报
这个 建立 BufferedWriter bw = new BufferedWriter(new FileWriter("info.txt")) 放在前边时,即使是路径有info.txt这个文件 ,而new FileWriter("info.txt")这个一部会创建流的同时自动创建一个info.txt文件,并把源文件覆盖,这样导致原来的与文件没有了,而是变成了有new FileWriter("info.txt")这句代码生成的新的空的info.txt ,所以你在后边prop.load(br);的时候 读入Properties 中的是空,没有键值对 ,后边setProperty  然后store了 也就是只有之前setProperty 这一个键值对了。

解决办法就是就是你所说的 先load了以后再去创建BufferedWriter bw = new BufferedWriter(new FileWriter("info.txt"));
回复 使用道具 举报
刘凯 发表于 2013-5-2 20:13
这个 建立 BufferedWriter bw = new BufferedWriter(new FileWriter("info.txt")) 放在前边时,即使是路径 ...

领教了,谢谢!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马