日期:2014-05-20  浏览次数:20718 次

很奇怪的问题,关于Properties
本地的配置文件,info.txt,里面的内容是:
a=2
b=3
c=4

用properties里的方法,加载配置文件,然后修改参数,然后存储。
第一种是这样:
  FileReader fr = new FileReader("D:\\info.txt");
Properties prop = new Properties();
prop.load(fr);
prop.setProperty("a", "1");
FileWriter fw = new FileWriter("D:\\info.txt");
prop.store(fw, "mic");
结果是,本地文本中的内容是
a=1
b=3
c=4
第二种这样:
  FileReader fr = new FileReader("D:\\info.txt");
FileWriter fw = new FileWriter("D:\\info.txt");
Properties prop = new Properties();
prop.load(fr);
prop.setProperty("a", "1");
prop.store(fw, "mic");
结果是,本地文本中的内容只剩下:
a=1

为什么啊?

------解决方案--------------------
第二种,你文件存在,new FileWriter("D:\\info.txt");相当于覆盖了文件,那fr相当于是空的流,从里面是读不出什么数据的,那prop.load的时候就是空的了,最后保存的时候就只有你设置的那个值。你可以
new FileWriter("D:\\info.txt",true); 这个表示在给出文件名的情况下构造 FileWriter 对象,它具有指示是否挂起写入数据的 boolean 值。 就不会出现这种情况
------解决方案--------------------
这句会把文件内容冲掉。
FileWriter fw = new FileWriter("D:\\info.txt");
1里你先用prop.load(fr);把文件内容load到内存了。
所以都保留了下来。