博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
IO操作中关闭流的注意点(多个关闭时的异常需要单独处理)
阅读量:4040 次
发布时间:2019-05-24

本文共 1752 字,大约阅读时间需要 5 分钟。

一、错误示例1

public void CopyFile()

{

FileReader fr = null;

FileWriter fw = null;

try

{

fr = new FileReader("c:\\xy1.txt"); // ①

fw = new FileWriter("c:\\xy2.txt"); // ②

char[] charBuffer = new char[1024];

int len = 0;

while ((len = fr.read(charBuffer)) != -1)

{

fw.write(charBuffer, 0, len);

}

System.out.println("文件复制成功");

}

catch (IOException e)

{

throw new RuntimeException("文件拷贝操作失败");

}

finally

{

try

{

fr.close(); // ③

fw.close(); // ④

}

catch (IOException e)

{

throw new RuntimeException("关闭失败");

}

}

}

若①中代码出错,fr根本就没有初始化,执行③的时候就会报空指针异常。②④同样是这个道理。



二、错误示例2

public void CopyFile()

{

FileReader fr = null;

FileWriter fw = null;

try

{

fr = new FileReader("c:\\xy1.txt"); // ①

fw = new FileWriter("c:\\xy2.txt"); // ②

char[] charBuffer = new char[1024]; 

int len = 0;

while ((len = fr.read(charBuffer)) != -1)

{

fw.write(charBuffer, 0, len);

}

System.out.println("文件复制成功");

}

catch (IOException e)

{

throw new RuntimeException("文件拷贝操作失败");

}

finally

{

try

{

if (null != fr)

{

fr.close(); // ③

}

if (null != fw)

{

fw.close(); // ④

}

}

catch (IOException e)

{

throw new RuntimeException("关闭失败"); // ⑤

}

}

}

加上是否为空的判断可以避免空指针异常。但是如果③执行出错,程序会直接进入⑤而④根本没有得到执行,导致无法关闭。


三、正确示例

public void CopyFile()

{

FileReader fr = null;

FileWriter fw = null;

try

{

fr = new FileReader("c:\\xy1.txt");

fw = new FileWriter("c:\\xy2.txt");

char[] charBuffer = new char[1024]; 

int len = 0;

while ((len = fr.read(charBuffer)) != -1)

{

fw.write(charBuffer, 0, len);

}

System.out.println("文件复制成功");

}

catch (IOException e)

{

throw new RuntimeException("文件拷贝操作失败");

}

finally

{

try

{

if (null != fr)

{

fr.close();

}

}

catch (IOException e)

{

throw new RuntimeException("关闭失败");

}


try

{

if (null != fw)

{

fw.close();

}

}

catch (IOException e)

{

throw new RuntimeException("关闭失败");

}

}

}

转载地址:http://kmadi.baihongyu.com/

你可能感兴趣的文章
idea讲web项目部署到tomcat,热部署
查看>>
IDEA Properties中文unicode转码问题
查看>>
Idea下安装Lombok插件
查看>>
zookeeper
查看>>
Idea导入的工程看不到src等代码
查看>>
技术栈
查看>>
Jenkins中shell-script执行报错sh: line 2: npm: command not found
查看>>
8.X版本的node打包时,gulp命令报错 require.extensions.hasownproperty
查看>>
Jenkins 启动命令
查看>>
Maven项目版本继承 – 我必须指定父版本?
查看>>
Maven跳过单元测试的两种方式
查看>>
通过C++反射实现C++与任意脚本(lua、js等)的交互(二)
查看>>
利用清华镜像站解决pip超时问题
查看>>
[leetcode BY python]1两数之和
查看>>
微信小程序开发全线记录
查看>>
PTA:一元多项式的加乘运算
查看>>
CCF 分蛋糕
查看>>
解决python2.7中UnicodeEncodeError
查看>>
小谈python 输出
查看>>
Django objects.all()、objects.get()与objects.filter()之间的区别介绍
查看>>