黑马程序员技术交流社区

标题: 关于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