黑马程序员技术交流社区
标题:
读写缓冲区操作中的一个疑问
[打印本页]
作者:
李贺晓
时间:
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