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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 张向辉 于 2013-1-16 12:40 编辑
  1. package cn.itcast.homework;

  2. import java.io.FileReader;
  3. import java.io.FileWriter;
  4. import java.io.IOException;
  5. import java.util.Properties;
  6. import java.util.Set;

  7. public class CopyPerson
  8. {
  9. //查找某个文件中是否存在键为lisi的数据,如果有,把值改为50。
  10. public static void main(String[] args) throws IOException
  11. {
  12. //创建Properties对象,装文件数据
  13. Properties prop = new Properties();
  14. //封装数据源目录
  15. FileReader fr = new FileReader("CopyPerson.txt");
  16. //封装写入目的地目录
  17. FileWriter fw = new FileWriter("CopyPerson.txt");
  18. //加载
  19. prop.load(fr);
  20. //关闭流
  21. fr.close();
  22. //遍历集合,查找有没有这样的键,如果有,修改
  23. Set<Object> set = prop.keySet();
  24. for(Object obj : set)
  25. {
  26. String key = (String)obj;
  27. //判断键值是否存在
  28. if("lisi".equals(key))
  29. {
  30. prop.setProperty(key, "50");
  31. break ;
  32. }
  33. }
  34. //保存数据
  35. prop.store(fw, null);
  36. fw.close();
  37. }
  38. }
复制代码
查找某个文件中是否存在键为lisi的数据,如果有,把值改为50。
上面代码有什么问题吗?为什么不但没改变键对应值,运行后该文件里的东西都没了?只有注释了?这是为什么?

QQ截图201301142353122222222221.png (7.33 KB, 下载次数: 44)

运行后的文件

运行后的文件

评分

参与人数 1黑马币 +1 收起 理由
Rancho_Gump + 1 赞一个!

查看全部评分

5 个回复

倒序浏览
19.FileWriter fw = new FileWriter("CopyPerson.txt");这段代码放到prop.load(fr)之后执行。。。

评分

参与人数 1黑马币 +9 收起 理由
Rancho_Gump + 9 赞一个!

查看全部评分

回复 使用道具 举报
亲 你试着把你保存的文件的名字不要和你读取的文件的名字改成不一样的,也许就能得到你的结果
回复 使用道具 举报
1楼的也是正解  你既然要读取写入同一个文件  肯定在读取和写入打开的时候不能在一个地方,要么你就以追加的方式打开。
要不然你在load()的时候文件已经什么都没有了  不信你可以试着把你打开文件后的所有加载保存的操作都注掉就能看到原因了
回复 使用道具 举报
舒远 发表于 2013-1-15 09:42
19.FileWriter fw = new FileWriter("CopyPerson.txt");这段代码放到prop.load(fr)之后执行。。。 ...

有什么区别吗?
回复 使用道具 举报
何伟 发表于 2013-1-16 01:07
有什么区别吗?

你程序运行失败的原因就在于,在Properties类实例加载资源文件之前,不能有两个流来关联这个文件。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马