A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 马振兴 中级黑马   /  2012-11-3 21:14  /  1594 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 马振兴 于 2012-11-7 17:15 编辑
  1. import java.io.FileWriter;
  2. import java.io.IOException;

  3. public class BufferedWriterDemo {

  4.         /**
  5.          * @param args
  6.          * @throws IOException
  7.          */
  8.         public static void main(String[] args) throws IOException {
  9.                  FileWriter fw = new FileWriter("d:\\Demo.txt");
  10.                  BufferedWriter bufw = new BufferedWriter(fw);
  11.                  
  12.                  bufw.write("abcde");
  13.                  bufw.newLine();
  14.                  bufw.write("12334");
  15.                  
  16.                  bufw.close();
  17.                  //fw.close(); 为什么关闭BufferedWriter 就是关闭了FileWriter的流对象?取消了fw.close();的注释后,似乎这语句没起任何作用
  18.         }

  19. }
复制代码
为什么关闭BufferedWriter 就是关闭了FileWriter的流对象?

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

2 个回复

倒序浏览
这是fw.close的作用。请运行代码。
  1. package com.snow;

  2. import java.io.BufferedWriter;
  3. import java.io.FileWriter;
  4. import java.io.IOException;

  5. public class BufferedWriterDemo {

  6.         /**
  7.          * @param args
  8.          * @throws IOException
  9.          */
  10.         public static void main(String[] args) throws IOException {
  11.                  FileWriter fw = new FileWriter("d:\\Demo.txt");
  12.                  BufferedWriter bufw = new BufferedWriter(fw);
  13.                  
  14.                  fw.write("aaaaaaaaaaa");
  15.                  bufw.write("abcde");
  16.                  bufw.newLine();
  17.                  bufw.write("12334");
  18.                  
  19.                  //bufw.close();
  20.                  fw.close(); //为什么关闭BufferedWriter 就是关闭了FileWriter的流对象?取消了fw.close();的注释后,似乎这语句没起任何作用
  21.         }

  22. }
复制代码
官方的解释:注意红色的部分
close
public void close()
           throws IOException
Description copied from class: Writer
Closes the stream, flushing it first. Once the stream has been closed, further write() or flush() invocations will cause an IOException to be thrown. Closing a previously closed stream has no effect.
Specified by:
close in interface Closeable
Specified by:
close in interface AutoCloseable
Specified by:
close in class Writer
Throws:
IOException - If an I/O error occurs

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
记得以前学io流的时候好像说过,越高层的类,管理着底层的类。类似接管的关系,具体不是很清楚。
在我理解就是,file给了bw一个指向而已,之后的事就不用file操心了,bw会解决一切。

如果bw关了,那么file自己起不了作用的 差不多就这样

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马