黑马程序员技术交流社区

标题: 关于properties与输出流的问题 [打印本页]

作者: 曾浩    时间: 2012-10-19 12:48
标题: 关于properties与输出流的问题
本帖最后由 曾浩 于 2012-10-19 14:03 编辑

public class PropertiesAndIoFile {

public static void main(String[] args) {

    loadInput();
  
}

public static void loadInput(){
  Properties pro = new Properties();
  FileInputStream fis =null;
  //FileOutputStream fos =null;
   try {
    fis = new FileInputStream("D:\\hell.txt");
  //fos = new FileOutputStream("D:\\hell.txt");
   
  pro.load(fis);
  System.out.println(pro);
   
  }
  catch (IOException e) {
   
   e.printStackTrace();
  }finally{
   try {
   
    //fos.close();
    fis.close();
   } catch (IOException e) {
   
    e.printStackTrace();
   }
   
  }
}


}
这个程序这样运行是ok的  但是如果加上了被注释的输出流 只要程序运行那个配置文件里面的数据就被清空了 并且输出结果也是空的 这说明在读取数据前那个配置文件就被清空了 那个输出流什么也没有做 只是创建了一个输出流对象而已为什么会出现这种情况? 很纠结啊

作者: 古银平    时间: 2012-10-19 12:55
//FileOutputStream fos =null;  //fos = new FileOutputStream("D:\\hell.txt");这句话将会在D盘下新建一个hell.txt,那么原来的hell.txt将被覆盖,新的hell.txt文件中是没有内容的,因为你没有写入过内容;
作者: 李铁    时间: 2012-10-19 13:26
同意楼上的说法,因为你创建一个创建一个向具有指定名称的文件中写入数据的输出文件流fos
//FileOutputStream fos =null;
//fos = new FileOutputStream("D:\\hell.txt");
这样就会覆盖掉你原来那个hell.txt文件本文件,没有指定写入数据;所以就是空白的,
如果你不想让它覆盖,可以创建具有指定name的文件中写入输出流,添加一个true参数;意思是指将字节写入文件末尾处,而是不是开头处。
如下:
fos = new FileOutputStream("D:\\hell.txt",true);
这样就不会覆盖掉你原文件里的内容。

作者: 曾浩    时间: 2012-10-19 14:03
谢谢楼上的啊 写多了晕了 以为把两个流写在一起方便点  结果把最基本的给忽略了




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