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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 任献东 中级黑马   /  2014-10-15 19:03  /  1427 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. package 黑马练习;

  2. import java.io.BufferedReader;
  3. import java.io.BufferedWriter;
  4. import java.io.FileReader;
  5. import java.io.FileWriter;
  6. import java.io.IOException;

  7. public class FileReader_Writer_Demo {

  8.         public static void main(String[] args) {
  9.                 BufferedReader bufr = null;
  10.                 BufferedWriter bufw = null;
  11.         try {
  12.                         bufr = new BufferedReader(new FileReader("Test.txt"));
  13.                         bufw = new BufferedWriter(new FileWriter("Test_copy.txt"));
  14.                         String line = null;
  15.                         while((line=bufr.readLine())!=null){
  16.                                 bufw.write(line);
  17.                                 bufw.newLine();
  18.                                 bufw.flush();
  19.                         }
  20.                 } catch (IOException e) {
  21.                         // TODO 自动生成的 catch 块
  22.                         e.printStackTrace();
  23.                 }
  24.         finally{
  25.                 try {
  26.                         if(bufw!= null){//不理解 为什么是bufw!=null?不是应该如果缓冲区为空时就关闭么?
  27.                                 bufw.close();
  28.                         }
  29.                         } catch (IOException e1) {
  30.                                 // TODO 自动生成的 catch 块
  31.                                 e1.printStackTrace();
  32.                         }
  33.                
  34.                 try {
  35.                         if(bufr!= null){
  36.                                 bufr.close();
  37.                         }
  38.                         } catch (IOException e) {
  39.                                 // TODO 自动生成的 catch 块
  40.                                 e.printStackTrace();
  41.                         }
  42.         }
  43.         }

  44. }
复制代码

关闭流的条件判断 不是应该如果缓冲区为空时就关闭么  为什么是bufw!=null

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1 淡定

查看全部评分

8 个回复

倒序浏览
为空时,说明没有调用底层资源,还关他干啥,只有不为空时才关闭的。记不很大清楚了,老毕视频里有讲,你再看下
回复 使用道具 举报
包名竟然是汉字{:3_55:}
回复 使用道具 举报
无论是否异常都要close(),为了防止实例化流对象失败,所以这里要判断一下再关闭,close()之前会自动刷新缓存
回复 使用道具 举报
只是为了防止出现空指针异常,如果bufr==null,bufr.close()会出异常。缓冲区关闭的是流资源
回复 使用道具 举报
兄弟, flush()是这么定义的:通过将所有已缓冲输出写入底层流来刷新此流。要是缓冲区为空了,那说明该流已经被关闭了
回复 使用道具 举报
郭.威 中级黑马 2014-10-16 02:34:12
7#
果bufr==null,bufr.close()会出异常
回复 使用道具 举报
不为null时,说明他还消耗着资源,所以需要把它关掉,为空时,则相反
回复 使用道具 举报
zhappy 中级黑马 2014-10-16 08:28:54
9#
空指针就不用关了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马