通常在 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文本、网络等资源相关推荐

  1. java退出函数_如何更新线上的 Java 服务器代码

    来源:cnblogs.com/orange911/p/10583245.html 一.前言 1.热更新代码的场景 (1)当线上服务器出现问题时,有些时候现有的手段不足以发现问题所在,可能需要追加打印日 ...

  2. Effective java 系列之更优雅的关闭资源-try-with-resources

    背景: 在Java编程过程中,如果打开了外部资源(文件.数据库连接.网络连接等),我们必须在这些外部资源使用完毕后,手动关闭它们.因为外部资源不由JVM管理,无法享用JVM的垃圾回收机制,如果我们不在 ...

  3. 最全面的Java面试题-----是你更好的掌握java知识

    最全面的Java面试题-----是你更好的掌握java知识 目录 l     概念题--- 1 一.        JAVA基础--- 1 1)      面向对象的特征--- 1 2)      什 ...

  4. java build path entries 为空_同事的代码简直没法看,我来教你如何更优雅的设计Java异常...

    点击上方蓝色字体,选择"设为星标" 回复"666"获取面试宝典 异常处理是程序开发中必不可少操作之一,但如何正确优雅的对异常进行处理确是一门学问,笔者根据自己的 ...

  5. 教你如何更优雅的设计Java异常

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源:lrwinx https://lrwinx.github.i ...

  6. python还是java好找工作_你觉得学 Python 还是 Java 更好找工作?

    java是一门资深的编程语言,也是普及率比较高的一门语言,有着非常丰富的第三方库,在市场上的需求量也是非常高的,可以从事web开发.网络开发以及app开发等工作,这些都是通过java来实现的,也是一种 ...

  7. java jodatime明天_使用Joda-Time优雅的处理日期时间

    简介 在Java中处理日期和时间是很常见的需求,基础的工具类就是我们熟悉的Date和Calendar,然而这些工具类的api使用并不是很方便和强大,于是就诞生了Joda-Time这个专门处理日期时间的 ...

  8. java核心面试_前100多个核心Java面试问题

    java核心面试 Core Java interview questions help you in preparing for java based interviews. Whether you ...

  9. selenium查找文本_在Selenium中查找具有链接文本和部分链接文本的元素

    selenium查找文本 Selenium中CSS定位器是一个基本概念,每个旨在使用Selenium执行自动化测试的测试人员都应该意识到这一点. 在Selenium中充分使用CSS定位器可以帮助您以更 ...

最新文章

  1. A. Case of the Zeros and Ones
  2. [leetcode] 367. Valid Perfect Square
  3. python的上下文管理
  4. 解决J2EE系统应用性能问题常用方法
  5. 与顶级互联网公司技术大佬面对面聊聊RocketMQ
  6. lambda表达式优化反射_反射选择器表达式
  7. asyncdata 获取参数_nuxt的asyncData发送post请求如何传递FormData形式的参数
  8. 正确地利用Netty建立连接池
  9. 提高网站打开速度的18点要素和五点建议
  10. 服务器系统试用,“雪豹”安装篇(3)
  11. 计算机等级考试准考证打河南,2019年河南牧院计算机等级考试准考证打印时间...
  12. GetDC()没有释放造成的后果
  13. 【深圳】大疆创新 - 测试/测试开发工程师 - 自动驾驶方向
  14. 浅入浅出keepalived+nginx实现高可用双机热备
  15. 【Stephen Boyd】【2009】凸优化
  16. ECCV 2018论文解读及资源集锦(8月20日更新)
  17. 【Android+Kotlin】NestedScrollView
  18. 计算机组成原理第五课,计算机组成原理第五章课件(白中英版).ppt
  19. 吉大计算机学院大一课表,大学计算机基础(吉林大学)大学计算机基础课程计划及方案.doc...
  20. 侯捷-C++面向对象高级开发(三大函数:拷贝构造,拷贝赋值,析构)

热门文章

  1. vscode更换主题的插件_VScode 插件开发(三)主题
  2. 253B. Physics Practical
  3. 万丰科技机器人排名_2020年全国机器人企业数量大排名(省份榜|9月)
  4. kcbzps oracle_Oracle 11g DRCP配置与使用(上)
  5. oracle 11g exp 报错 EXP-00056;ORA-12154;EXP-00000;
  6. oracle中exp/imp讲解
  7. sip中的100trying到底有啥用
  8. 学习select(函数)
  9. 深入浅出VC++串口编程之基于Win32 API
  10. 第七节:WebApi与Unity整合进行依赖注入和AOP的实现