黑马程序员技术交流社区

标题: 问题:查找文件中是否有某个键的数据,存在就修改键对应的值 [打印本页]

作者: 何伟    时间: 2013-1-14 23:54
标题: 问题:查找文件中是否有某个键的数据,存在就修改键对应的值
本帖最后由 张向辉 于 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, 下载次数: 39)

运行后的文件

运行后的文件

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

有什么区别吗?
作者: 舒远    时间: 2013-1-16 08:56
何伟 发表于 2013-1-16 01:07
有什么区别吗?

你程序运行失败的原因就在于,在Properties类实例加载资源文件之前,不能有两个流来关联这个文件。




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