java关闭文本_如何更优雅的关闭java文本、网络等资源
通常在 java 中对文本、网络资源等操作起来是很繁杂的,要声明,读取,关闭三个阶段,还得考虑异常情况。假设我们要读取一段文本显示到控制台,通常会有如下的代码:
public static void main(String[] args) {
FileInputStream inputStream = null;
try {
inputStream = new FileInputStream("./pom.xml");
InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");
BufferedReader reader = new BufferedReader(inputStreamReader);
String str;
while ((str = reader.readLine()) != null) {
System.out.println(str);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (inputStream != null) {
try {
inputStream.close();
} catch (Exception e) {
}
}
}
}
在 finally 的关闭代码中,还要再来一个 try/catch,看着是不是很难受,很不优雅,很想干掉这个 finally!
自从 java7 以来这个问题已经有比较好的解决办法了,那就是try-with-resource,可能是 jdk 开发人员也觉得之前的关闭资源写法太反人类,所以做了这样的一个语法糖。注意这并不是什么新特性,只是一个语法糖,简化代码的。如果你反编译代码后会发现还是 try/catch/finally 的传统写法。
try-with-resource 用法如下:
try (FileInputStream inputStream = new FileInputStream("./pom.xml")) {
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "utf-8"));
String str;
while ((str = reader.readLine()) != null) {
System.out.println(str);
}
} catch (Exception e) {
e.printStackTrace();
}
无需在 finally 中手动关闭 inputStream,凡是实现了 AutoCloseable 接口的,且在 try 后面的括号中创建的,都会在 try/catch 执行完毕后确保调用 close 方法。这么写是不是优雅多了??
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持聚米学院。
java关闭文本_如何更优雅的关闭java文本、网络等资源相关推荐
- java退出函数_如何更新线上的 Java 服务器代码
来源:cnblogs.com/orange911/p/10583245.html 一.前言 1.热更新代码的场景 (1)当线上服务器出现问题时,有些时候现有的手段不足以发现问题所在,可能需要追加打印日 ...
- Effective java 系列之更优雅的关闭资源-try-with-resources
背景: 在Java编程过程中,如果打开了外部资源(文件.数据库连接.网络连接等),我们必须在这些外部资源使用完毕后,手动关闭它们.因为外部资源不由JVM管理,无法享用JVM的垃圾回收机制,如果我们不在 ...
- 最全面的Java面试题-----是你更好的掌握java知识
最全面的Java面试题-----是你更好的掌握java知识 目录 l 概念题--- 1 一. JAVA基础--- 1 1) 面向对象的特征--- 1 2) 什 ...
- java build path entries 为空_同事的代码简直没法看,我来教你如何更优雅的设计Java异常...
点击上方蓝色字体,选择"设为星标" 回复"666"获取面试宝典 异常处理是程序开发中必不可少操作之一,但如何正确优雅的对异常进行处理确是一门学问,笔者根据自己的 ...
- 教你如何更优雅的设计Java异常
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源:lrwinx https://lrwinx.github.i ...
- python还是java好找工作_你觉得学 Python 还是 Java 更好找工作?
java是一门资深的编程语言,也是普及率比较高的一门语言,有着非常丰富的第三方库,在市场上的需求量也是非常高的,可以从事web开发.网络开发以及app开发等工作,这些都是通过java来实现的,也是一种 ...
- java jodatime明天_使用Joda-Time优雅的处理日期时间
简介 在Java中处理日期和时间是很常见的需求,基础的工具类就是我们熟悉的Date和Calendar,然而这些工具类的api使用并不是很方便和强大,于是就诞生了Joda-Time这个专门处理日期时间的 ...
- java核心面试_前100多个核心Java面试问题
java核心面试 Core Java interview questions help you in preparing for java based interviews. Whether you ...
- selenium查找文本_在Selenium中查找具有链接文本和部分链接文本的元素
selenium查找文本 Selenium中CSS定位器是一个基本概念,每个旨在使用Selenium执行自动化测试的测试人员都应该意识到这一点. 在Selenium中充分使用CSS定位器可以帮助您以更 ...
最新文章
- A. Case of the Zeros and Ones
- [leetcode] 367. Valid Perfect Square
- python的上下文管理
- 解决J2EE系统应用性能问题常用方法
- 与顶级互联网公司技术大佬面对面聊聊RocketMQ
- lambda表达式优化反射_反射选择器表达式
- asyncdata 获取参数_nuxt的asyncData发送post请求如何传递FormData形式的参数
- 正确地利用Netty建立连接池
- 提高网站打开速度的18点要素和五点建议
- 服务器系统试用,“雪豹”安装篇(3)
- 计算机等级考试准考证打河南,2019年河南牧院计算机等级考试准考证打印时间...
- GetDC()没有释放造成的后果
- 【深圳】大疆创新 - 测试/测试开发工程师 - 自动驾驶方向
- 浅入浅出keepalived+nginx实现高可用双机热备
- 【Stephen Boyd】【2009】凸优化
- ECCV 2018论文解读及资源集锦(8月20日更新)
- 【Android+Kotlin】NestedScrollView
- 计算机组成原理第五课,计算机组成原理第五章课件(白中英版).ppt
- 吉大计算机学院大一课表,大学计算机基础(吉林大学)大学计算机基础课程计划及方案.doc...
- 侯捷-C++面向对象高级开发(三大函数:拷贝构造,拷贝赋值,析构)
热门文章
- vscode更换主题的插件_VScode 插件开发(三)主题
- 253B. Physics Practical
- 万丰科技机器人排名_2020年全国机器人企业数量大排名(省份榜|9月)
- kcbzps oracle_Oracle 11g DRCP配置与使用(上)
- oracle 11g exp 报错 EXP-00056;ORA-12154;EXP-00000;
- oracle中exp/imp讲解
- sip中的100trying到底有啥用
- 学习select(函数)
- 深入浅出VC++串口编程之基于Win32 API
- 第七节:WebApi与Unity整合进行依赖注入和AOP的实现