黑马程序员技术交流社区

标题: 两个流同时关联一个文件会发生什么?! [打印本页]

作者: ヅ飞飞    时间: 2013-11-1 13:07
标题: 两个流同时关联一个文件会发生什么?!
本帖最后由 ヅ飞飞 于 2013-11-1 19:20 编辑

今天做Properties类练习时,遇到的流的问题代码如下:
  1. package day20;

  2. import java.io.File;
  3. import java.io.FileInputStream;
  4. import java.io.FileOutputStream;
  5. import java.io.IOException;
  6. import java.util.Properties;

  7. public class PropertiesDemo {
  8.         public static void main(String[] args) throws IOException {
  9.                 File file = new File(
  10.                                 "E:\\android\\workspace\\heima\\src\\day20\\info.txt");
  11.                 if (!file.exists())
  12. file.createNewFile();
  13.                 FileOutputStream out = new FileOutputStream(file);// 这句是之前做写操作时的语句。
  14.                 FileInputStream in = new FileInputStream(file);

  15.                 Properties pro = new Properties();
  16.                 pro.load(in);
  17.                 System.out.println(pro);

  18.                 // pro.setProperty("zhansan", 23 + "");
  19.                 // pro.setProperty("lisi", 24 + "");
  20.                 // pro.store(out, "");

  21.         }
  22. }
复制代码
配置文件info.txt中有配置信息,当执行次代码后配置文件信息清空(目测覆盖文件了),原因找到了就是上面注释的FileOutputSream的原因,去掉此句执行正常可以读入配置信息。但不是很理解错误的原因,是因为两个流同时关联一个文件的原因么?new一个FileOutputStream(file)时如果文件存在它是创建新文件然后覆盖么,那么new一个FileInputStream(file)是不是也覆盖?

作者: ヅ飞飞    时间: 2013-11-1 19:20
找到答案了,输出流new对象时如果不指定续写(blooen append),指定文件已存在会创建新文件覆盖原有文件。
把输出流写在prop.load(fr);前面就相当于每次load的文件都是被覆盖后的是空的文件。




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