黑马程序员技术交流社区

标题: 关于关闭流对象时 条件判断问题 [打印本页]

作者: 任献东    时间: 2014-10-15 19:03
标题: 关于关闭流对象时 条件判断问题
  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
作者: dreamseekerkun    时间: 2014-10-15 19:11
为空时,说明没有调用底层资源,还关他干啥,只有不为空时才关闭的。记不很大清楚了,老毕视频里有讲,你再看下
作者: 付江涛    时间: 2014-10-15 20:06
包名竟然是汉字{:3_55:}
作者: Eric1225    时间: 2014-10-15 20:16
无论是否异常都要close(),为了防止实例化流对象失败,所以这里要判断一下再关闭,close()之前会自动刷新缓存
作者: 九零零    时间: 2014-10-15 20:37
只是为了防止出现空指针异常,如果bufr==null,bufr.close()会出异常。缓冲区关闭的是流资源
作者: hollywood2014    时间: 2014-10-15 21:05
兄弟, flush()是这么定义的:通过将所有已缓冲输出写入底层流来刷新此流。要是缓冲区为空了,那说明该流已经被关闭了
作者: 郭.威    时间: 2014-10-16 02:34
果bufr==null,bufr.close()会出异常
作者: HM2014nuli    时间: 2014-10-16 07:50
不为null时,说明他还消耗着资源,所以需要把它关掉,为空时,则相反
作者: zhappy    时间: 2014-10-16 08:28
空指针就不用关了




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