黑马程序员技术交流社区

标题: 输入流和输出流能并列写在一起吗,为什么? [打印本页]

作者: 曾勇    时间: 2014-11-23 10:27
标题: 输入流和输出流能并列写在一起吗,为什么?
import java.io.*;
import java.util.*;
class Test
{
        public static void main(String args[])throws IOException
        {
                File file = new File("Test.txt");
                if(!file.exists())
                        file.createNewFile();
                BufferedReader br = new BufferedReader(new FileReader(file));
                Properties pro = new Properties();
                pro.load(br);
                if((pro.getProperty("time"))==null)
                        pro.setProperty("time","1");
                else if((pro.getProperty("time"))!=null)
                {
                        String s = pro.getProperty("time");
                        int count = Integer.parseInt(s);
                        if(count>=5)
                                System.out.println("请注册后继续使用,交钱!!!");
                        else
                        {
                                count++;
                                System.out.println(count);
                                pro.setProperty("time",Integer.toString(count));
                        }
                       
                }
                BufferedWriter bw = new BufferedWriter(new FileWriter(file));
                pro.store(bw,"");
                br.close();
                bw.close();
        }

}
这样写代码没有问题,但是为什么我把输出流和输入流写在一起的时候就不符合需求了啊 ?


作者: wf111sxwf    时间: 2014-11-23 11:36
当你把输出流和输入流放在一起时,当程序执行到BufferedWriter bw = new BufferedWriter(new FileWriter(file));时,这个输出流对象会从新创建一个文件把原来的 配置文件覆盖掉,所以如果写到一起,当程序第二次执行的时候 配置文件里还是没有任何信息,所以你Properties集合调用load方法的时候实际上还是在载入一个空文件,所以你配置文件里的配置信息也不会随着你程序的运行次数而改变。

输出流是不管你有没有目标文件,他都会取创建一个文件取覆盖原文件,除非你在构造参数中加上 true.
作者: 曾勇    时间: 2014-11-23 12:43
wf111sxwf 发表于 2014-11-23 11:36
当你把输出流和输入流放在一起时,当程序执行到BufferedWriter bw = new BufferedWriter(new FileWriter(fi ...

哦哦, 明白了, 谢谢啦,
作者: 斷灬dian    时间: 2014-12-31 11:24
来学习的。。
作者: chudaming213    时间: 2015-1-13 11:31
昨天晚上我也碰到了这个问题,整了将近两个小时,就是因为输出流在定义的时候会重新创建一个空的文件,而我们这里有输出的文件命名与原先的文件相同,所以原先存储properties的文件就被windows给覆盖掉了




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