黑马程序员技术交流社区

标题: 在用Properties在处理获取存储在文本中的系统信息的一个小... [打印本页]

作者: 廖理    时间: 2012-5-9 20:56
标题: 在用Properties在处理获取存储在文本中的系统信息的一个小...
本帖最后由 廖理 于 2012-5-9 21:04 编辑

在用Properties在处理获取存储在文本中的系统信息,并将修改后的信息存入文本文件,

要用到输入和输出流,为什么,输出流必须在信息修改之后后初始化,否则就会出问题,

这是为什么呢啊?是不是与同步有关啊?


作者: 云惟桉    时间: 2012-5-10 01:37
如果不是同一个文本文件的话,应该不会出问题吧。

如果是同一个文本文件,那就要考虑read和write的使用之处了,因为这都是阻塞式的方法
至于初始化,我也想不通是什么原因。
希望楼主解决疑惑以后能分享一下经验,呵
作者: 张小锋    时间: 2012-5-10 09:22
除了在load()方法之后创建输出流对象
也可以在load()方法之前创建输出流,前提是文件File不能与的输入流的File是同一个文件。例:
Reader r=new FileReader("F:\\a.properties");
FileWriter fw=new FileWriter("F:\\b.properties");
p.load(r);
r.close();
还可以创建输出流时标示是向文件中追加,例:
Properties p=new Properties();
Reader r=new FileReader("F:\\a.properties");
    FileWriter fw=new FileWriter("F:\\a.properties",true);
p.load(r);
r.close();
原因可能是在load属性之前,如果构造了新的输出流,并且输出流和输入流文件同名,调用load()时,此时的输入流的指向已经不是实际的properties文件,而变成了内存中由输出流产生的空的properties,导致的结果就是此时在调用load()方法时,加载的就是一个空的properties,
如果输出流时追加的话,内存中产生了一个包含File文件信息的properties,然后输入流还是指向了内存的这个properties,不过这是就不是空的。
如果输出流和输入流指向的不是同一个文件,这时输入流不会在重新指向内存由输出流产生的properties了。






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