新闻资讯  快讯  焦点  财经  政策  社会
互 联 网   电商  金融  数据  计算  技巧
生活百科  科技  职场  健康  法律  汽车
手机百科  知识  软件  修理  测评  微信
软件技术  应用  系统  图像  视频  经验
硬件技术  知识  技术  测评  选购  维修
网络技术  硬件  软件  设置  安全  技术
程序开发  语言  移动  数据  开源  百科
安全防护  资讯  黑客  木马  病毒  移动
站长技术  搜索  SEO  推广  媒体  移动
财经百科  股票  知识  理财  财务  金融
教育考试  育儿  小学  高考  考研  留学
您当前的位置:首页 > IT百科 > 程序开发 > 语言 > JAVA

Java代码中关闭流需要注意的一些细节

时间:2020-01-16 09:45:40  来源:  作者:

我们在JAVA项目中会处理流,流使用完成后一定要注意关闭流,但是在关闭流时有一些注意点容易忽略,我们以文件流为例先看两个错误实例。

/** * 错误实例1 *  * @author 今日头条号「IT徐胖子」 * */public class Test1 {public void copyFile() {FileReader fr = null;FileWriter fw = null;try {fr = new FileReader("c:\\aaa.txt"); // 代码1fw = new FileWriter("c:\\bbb.txt"); // 代码2char[] 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(); // 代码3fw.close(); // 代码4} catch (IOException e) {throw new RuntimeException("流关闭失败");}}}}

Test1问题在于如果代码1出错,fr根本就没有初始化,执行代码3时就会报空指针异常。代码2和代码4同样是这个道理。

/** * 错误实例2 *  * @author 今日头条号「IT徐胖子」 * */public class Test2 {public void copyFile() {FileReader fr = null;FileWriter fw = null;try {fr = new FileReader("c:\\aaa.txt"); // 代码1fw = new FileWriter("c:\\bbb.txt"); // 代码2char[] 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(); // 代码3}if (null != fw) {fw.close(); // 代码4}} catch (IOException e) {throw new RuntimeException("流关闭失败"); // 代码5}}}}

Test2加上是否为空的判断可以避免空指针异常。但是如果代码3执行出错,程序会直接进入代码5,而代码4根本没有得到执行,导致流无法关闭。我们来看一个正确实例。

/** * 正确实例 *  * @author 今日头条号「IT徐胖子」 * */public class Test3 {public void copyFile() {FileReader fr = null;FileWriter fw = null;try {fr = new FileReader("c:\\aaa.txt");fw = new FileWriter("c:\\bbb.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("流关闭失败");}}}}


Tags:Java   点击:()  评论:()
声明:本站部分内容来自互联网,内容观点仅代表作者本人,如有任何版权侵犯请与我们联系,我们将立即删除。
▌相关评论
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
▌相关推荐
第六名南京,平均工资16k 第五名广州,平均工资18k 第四名杭州,平均工资19k 第三名深圳,平均工资22k 第二名上海,平均工资23k 第一名北京,平均工资24k...【详细内容】
2020-03-17   Java  点击:(4)  评论:(0)  加入收藏
导论笔者的毕业设计是一个与大数据相关的项目,其中遇到了一个将百万级别数据存储到MySQL 的问题,本来是打算使用Spark SQL 的DataFrame 自带的API来直接将数据存储到MySQL 中,...【详细内容】
2020-03-16   Java  点击:(2)  评论:(0)  加入收藏
什么是java四大引用?是JDK1.2版本开始引入,把对象的引用分为4个等级,我们平时学习的就是四种的第一级的强引用,说白了,就Object o = new Object(),四个引用分别是强引用、软引用...【详细内容】
2020-03-16   Java  点击:(3)  评论:(0)  加入收藏
最近有很多朋友去目前主流的大型互联网公司面试(阿里巴巴、京东、字节跳动、蚂蚁金服、滴滴),面试回来之后会发给我一些面试题。有些朋友轻松过关,拿到offer,但是有一些是来询问...【详细内容】
2020-03-14   Java  点击:(14)  评论:(0)  加入收藏
AQS到底有什么用?难道就真的只是为了面试吗?当然不是说AQS没用,如果你不是做基础架构或者中间件开发,你很难感受到AQS的威力。当然,学习很多时候,需要的是正向反馈,学了太多造火箭...【详细内容】
2020-03-14   Java  点击:(4)  评论:(0)  加入收藏
互联网的发展有两种非常典型的产品形态:一种是流量分发,另一种是互联网 +。在流量分发时代,一切以技术为核心;但是现在是互联网 +,技术纯度在下降。而很多技术人都是从流量分发时...【详细内容】
2020-03-14   Java  点击:(10)  评论:(0)  加入收藏
网上看到一位前阿里人,36岁,离职后就职美团。以前投一个面一个,今年想跳槽,但没想到投十个能有两个面试机会就不错了,最后索性又回了阿里做架构。 他在面试的时候,碰见比自己大的...【详细内容】
2020-03-14   Java  点击:(12)  评论:(0)  加入收藏
如果你是一个JavaScript新手或仅仅最近才在你的开发工作中接触它,你可能感到沮丧。所有的语言都有自己的怪癖(quirks)——但从基于强类型的服务器端语言转移过来的开...【详细内容】
2020-03-13   Java  点击:(7)  评论:(0)  加入收藏
Javascript 是一种奇怪语言,有些人喜欢它,有些人讨厌它。它有许多独特的机制,这些机制在其他流行语言中不存在,也没有对应的机制,还有突出明显的就是代码的执行顺序了解浏览器环...【详细内容】
2020-03-13   Java  点击:(4)  评论:(0)  加入收藏
网络爬虫基本思路基本思路:由关键字指定的url把所有相关的html页面全抓下来(html即为字符串),然后解析html文本(通常是正则表达式或者现成工具包如jsoup),提取文本信息,然后把文本信...【详细内容】
2020-03-12   Java  点击:(3)  评论:(0)  加入收藏
2016年底,阿里巴巴公开了其在内部使用的Java编程规范。随后进行了几次版本修订,笔者当时看到的版本为v1.0.2版。下载地址可以在其官方社区—— 云栖社区 找到。笔者...【详细内容】
2020-03-12   Java  点击:(3)  评论:(0)  加入收藏
Java 方法调用中的参数是值传递还是引用传递呢?相信每个做开发的同学都碰到过传这个问题,不光是做 Java 的同学,用 C#、Python 开发的同学同样肯定遇到过这个问题,而且很有可能...【详细内容】
2020-03-11   Java  点击:(3)  评论:(0)  加入收藏
一、Token优势山东掌趣网络科技​1.1 与cookie相比较的优势1、支持跨域访问,将token置于请求头中,而cookie是不支持跨域访问的;2、无状态化,服务端无需存储token,只需要验证token...【详细内容】
2020-03-11   Java  点击:(6)  评论:(0)  加入收藏
现在 Java 相关岗位薪资越来越高、涨幅越来越大。通过职友集数据可以查看,以北京 Java 相关岗位为例,其中 【20k-30k】 薪酬的 Java 工程师,占到了整体从业者的 30.8%!北京 Java...【详细内容】
2020-03-11   Java  点击:(8)  评论:(0)  加入收藏
一. 什么是架构和架构本质在软件行业,对于什么是架构,都有很多的争论,每个人都有自己的理解。 此君说的架构和彼君理解的架构未必是一回事。因此我们在讨论架构之前,我们先讨论...【详细内容】
2020-03-11   Java  点击:(7)  评论:(0)  加入收藏
正如标题所述,JavaScript闭包对我来说一直有点神秘,看过很多闭包的文章,在工作使用过闭包,有时甚至在项目中使用闭包,但我确实是这是在使用闭包的知识。最近看到的一些文章,终于,...【详细内容】
2020-03-11   Java  点击:(6)  评论:(0)  加入收藏
需要热更新代码的场景(1)当线上服务器出现问题时,有些时候现有的手段不足以发现问题所在,可能需要追加打印日志或者增加一些调试代码,如果我们去改代码重新部署,会破坏问题现场,可...【详细内容】
2020-03-11   Java  点击:(12)  评论:(0)  加入收藏
正如标题所述,JavaScript闭包对我来说一直有点神秘,看过很多闭包的文章,在工作使用过闭包,有时甚至在项目中使用闭包,但我确实是这是在使用闭包的知识。最近看到的一些文章,终于,...【详细内容】
2020-03-11   Java  点击:(8)  评论:(0)  加入收藏
介绍本文主要为C#开发人员了解Java提供一些基础。Java中缺少C#的功能 C#包含更多原始类型和捕获算术异常的功能。 包括大量的Java注释便利,其中许多,例如运算符重载和用户定义的...【详细内容】
2020-03-10   Java  点击:(5)  评论:(0)  加入收藏
昨天看权威指南的时候看到一个个人觉得很优雅的写法,便想着记录一下(我的梦想就是写一手富有诗意的优雅代码)在Js世界中,有些操作会让你无法理解,但是却无比优雅。如有错误,欢迎批...【详细内容】
2020-03-09   Java  点击:(0)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条