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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李贺晓 中级黑马   /  2012-11-25 11:37  /  2203 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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("写入失败");
   }
  }
}
}
这里在关闭读写缓冲区的时候,为什么要判断是否为空呢,不判断的话应该也没什么问题的吧

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

4 个回复

倒序浏览
本帖最后由 赵红萍 于 2012-11-25 12:30 编辑

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

但是这里判断的话是不为空是可以关闭,这个时候别人如果正在使用的话,那肯定是不为空的,这个是关闭的话,那不是出现问题了

点评

如果流为空的话就没必要关闭了,没有留关闭什么,提高效率吧  发表于 2012-11-25 12:51
回复 使用道具 举报
  finally 语句是一定会执行的,假如你在读取 bufd=new BufferedReader(new FileReader("123.txt")); 时出现异常,这个时候bufd就是null
   if(bufd!=null)假如你不判断,执行调用   bufd.close(); 就会报 NullPointerException 异常
      bufd.close();
    }

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

回复 使用道具 举报
哦,刚才不在状态....没看清楚...是这样的,你程序在刚开始声明了读取流河写入流的引用,BufferedReader bufd=null;BufferedWriter bufw=null;在finally里的语句在程序结束时都会运行到,如果你的这两条语句出现了错误,
bufd=new BufferedReader(new FileReader("123.txt"));
bufw=new BufferedWriter(new FileWriter("1234_copy.txt"));没有创建成功,那么你在finally里写的关闭流就会提示空指针异常,所以在关闭时先要判断一下,就只是因为这个才判断,上面的那个解释是错的...

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

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