黑马程序员技术交流社区

标题: 关于Properties的一个小问题 [打印本页]

作者: 蚂蚁搬家    时间: 2013-5-1 14:50
标题: 关于Properties的一个小问题
本帖最后由 蚂蚁搬家 于 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”,
这是为何 啊?为什么在一开始就建立输出缓冲流,会导致配置文件被完全覆盖了?

作者: xiewen    时间: 2013-5-1 16:53
你这样做的挺好的,你把IO资源关了会更好
作者: 曹睿翔    时间: 2013-5-1 21:46
如果问题解决,请点编辑,改为已解决,没有请继续追问
作者: 蚂蚁搬家    时间: 2013-5-2 09:15
xiewen 发表于 2013-5-1 16:53
你这样做的挺好的,你把IO资源关了会更好

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

大哥我也不知道啊!
作者: 刘凯    时间: 2013-5-2 20:13
这个 建立 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-3 17:26
刘凯 发表于 2013-5-2 20:13
这个 建立 BufferedWriter bw = new BufferedWriter(new FileWriter("info.txt")) 放在前边时,即使是路径 ...

领教了,谢谢!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2