黑马程序员技术交流社区
标题:
关于Properties对文件的操作出现的问题
[打印本页]
作者:
青出于蓝
时间:
2013-12-24 13:37
标题:
关于Properties对文件的操作出现的问题
看着毕老师的视频我学习一下Properties的知识,自己写代码时发现下面的问题:
public static void loadDemo(){
FileInputStream fis=null;
FileOutputStream fos=null;
try {
fis=new FileInputStream("f:\\自己看\\info.txt");
fos=new FileOutputStream("f:\\自己看\\info.txt");
Properties prop=new Properties();
prop.load(fis);
System.out.println("修改前:"+prop);
prop.setProperty("hh", "100");
System.out.println("修改后:"+prop);
prop.store(fos, "zhushi");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
if (fos!=null) {
fos.close();
}
if (fis!=null) {
fis.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
我把FileOutputStream 的实例化对象放到prop.load()之前,则打印出{},把FileOutputStream 的实例化对象放到prop.load()之前,则打印出文本里的内容
我认为是FileOutputStream 实例化后把原来的文件覆盖了,即info.txt内容为空了。我尝试了一下的却是这样。
但是 fis=new FileInputStream("f:\\自己看\\info.txt");这段语句执行完毕后fis就不是null了,为什么load()出现的还是空?求各位大神指点小弟!!!谢谢!
作者:
Jim-剣◆﹏
时间:
2013-12-24 13:58
本帖最后由 Jim-剣◆﹏ 于 2013-12-24 14:08 编辑
看不太懂你描述的问题啊,再整理一下语句
因为看你问题描述似乎你已经解决了这个问题了
就是因为你把FileOutputStream写在load()前面的缘故,所以把文件覆盖了,所以当你想用load(fis)加载文件的时候,加载到的就是一个被覆盖后的空文件
其实有一个方法可以验证一下,就是FileOutputStream(String path,boolean A)有一个重载方法,续写就为true
你把 fos=new FileOutputStream("f:\\自己看
\\info.txt
");写在前面可以在路径后面加上true
改为 fos=new FileOutputStream("f:\\自己看
\\info.txt
",true);这样就不会覆盖,能够正确输出内容,但是不建议这么做,建议写在load后面
我之前也回复过一个类似问题的帖子
你可以参考一下
http://bbs.itheima.com/forum.php?mod=viewthread&tid=101228&page=1#pid568031
作者:
青出于蓝
时间:
2013-12-24 14:26
明白了,FileInputStream fis=new FileInputStream("f:\\自己看\\info.txt");只是创建了一个对象,并没有读取文件里的内容。我理解错了,看了你提供的帖子,更加清楚了,谢谢啦!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2