黑马程序员技术交流社区

标题: 读写缓冲区操作中的一个疑问 [打印本页]

作者: 李贺晓    时间: 2012-11-25 11:37
标题: 读写缓冲区操作中的一个疑问
import java.io.*;
class  CopyBuffer
{
public static void main(String[] args)
{
  BufferedReader bufd=null;
  BufferedWriter bufw=null;
  try
  {
   bufd=new BufferedReader(new FileReader("123.txt"));
   bufw=new BufferedWriter(new FileWriter("1234_copy.txt"));
   String line=null;
   while((line=bufd.readLine())!=null)
   {
    bufw.write(line);
    bufw.newLine();
    bufw.flush();
   }
  }
  catch (IOException e)
  {
   throw new RuntimeException("读写失败");
  }
  finally
  {
   try
   {
    if(bufd!=null)//这里是什么作用。为什么要加个这样的判断
     bufd.close();
   }
   catch (IOException e)
   {
    throw new RuntimeException("读取失败");
   }
   try
   {
    if(bufw!=null)//这里是什么作用。为什么要加个这样的判断
     bufw.close();
   }
   catch (IOException e)
   {
    throw new RuntimeException("写入失败");
   }
  }
}
}
这里在关闭读写缓冲区的时候,为什么要判断是否为空呢,不判断的话应该也没什么问题的吧
作者: 赵红萍    时间: 2012-11-25 12:06
本帖最后由 赵红萍 于 2012-11-25 12:30 编辑

当然要判断,你写的这个程序,就只是用来学习和练习的,这里只是用写入流和读取流来执行你指定的操作,但是到实际开发中,可能不止你一个人在使用这个读取和写入流,如果你不判断就关闭,那别人要通过这个流来传输数据时,就会出错了.///错的
作者: 李贺晓    时间: 2012-11-25 12:10
赵红萍 发表于 2012-11-25 12:06
当然要判断,你写的这个程序,就只是用来学习和练习的,这里只是用写入流和读取流来执行你指定的操作,但是到实 ...

但是这里判断的话是不为空是可以关闭,这个时候别人如果正在使用的话,那肯定是不为空的,这个是关闭的话,那不是出现问题了
作者: 森仔    时间: 2012-11-25 12:15
  finally 语句是一定会执行的,假如你在读取 bufd=new BufferedReader(new FileReader("123.txt")); 时出现异常,这个时候bufd就是null
   if(bufd!=null)假如你不判断,执行调用   bufd.close(); 就会报 NullPointerException 异常
      bufd.close();
    }
作者: 赵红萍    时间: 2012-11-25 12:29
哦,刚才不在状态....没看清楚...是这样的,你程序在刚开始声明了读取流河写入流的引用,BufferedReader bufd=null;BufferedWriter bufw=null;在finally里的语句在程序结束时都会运行到,如果你的这两条语句出现了错误,
bufd=new BufferedReader(new FileReader("123.txt"));
bufw=new BufferedWriter(new FileWriter("1234_copy.txt"));没有创建成功,那么你在finally里写的关闭流就会提示空指针异常,所以在关闭时先要判断一下,就只是因为这个才判断,上面的那个解释是错的...




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