java6中的资源管理语法

InputStream is = null;

try {

is = url.openStream();

OutputStream out = new FileOutputStream();

try {

byte[] buf = new byte[4096];

int len;

while ((len = is.read(buf)) > 0) {

out.write(buf, 0, len);

}

} catch (IOException e) {

} finally {

try {

out.close();

} catch (IOException closeOutx){

}

}

} catch (FileNotFoundException fnfx) {

} catch (IOException openx){

} finally {

try {

if (is != null) is.close();

} catch (IOException closeInx){

}

}

让我们看看上面的代码用Java7写出来什么样。和上面一样,url是一个指向下载目标文件的URL对象,file是一个保存下载数据的File对象。

try(OutputStream out = new FileOutputStream(file);

InputStream is = url.openStream() ) {

byte[] buf = new byte[4096];

int len;

while((len = is.read(buf)) > 0) {

out.write(buf, 0, len);

}

}

这是资源自动化管理代码块的基本形式——把资源放在try的圆括号内,在这段代码块中使用的资源在处理完成后会自动关闭。

但使用try-with-resources特性时还是要小心,因为在某些情况下资源可能无法关闭。比如在下面的代码中,如果从文件(sonmeFile.bin)创建ObjectInputStream时出错,FileInputStream就可能无法正确关闭。

try(ObjectInputStream in = new ObjectInputStream(new

FileInputStream("someFile.bin")) ) {

...

}

假定文件(someFIle.bin)存在,但可能不是ObjectInput类型的文件,所以文件无法正确打开。因此不能构建ObjectInputStream,所以FileInputStream也没办法关闭。

要确保twr生效,正确的用法是为各个资源声明独立变量。

try(FIleINputStream fin = new FileInputStream("someFIle.bin");

ObjectInputStream in = new ObjectInputStream(fin) ) {

...

}

目前TWR特性依靠一个新定义的接口实现AutoCloseable。TWR的try从句中出现的资源类都必须实现这个接口。Java7平台中的大多数资源类都被修改过,已经实现了AutoCloseable(Java7还定义了其父接口Closeable),但并不是全部资源相关的类都采用了这项技术。不过JDBC4.1已经具备了这个特性。

然而在自己的代码里,在处理资源时一定要用TWR,从而避免在异常处理时出现bug。

twr java_Java7中的try-with-resources(TWR)特性相关推荐

  1. SpringBoot中通过接口下载resources下的文件

    SpringBoot中通过接口下载resources下的文件 解决的问题 当项目打成jar包进行部署时,一些示例文件放在resources目录下,提供接口供用户访问下载 文件存放位置 接口实现 @Re ...

  2. android p preview_细数 Android P 开发者预览版中最不能错过的新特性

    原标题:细数 Android P 开发者预览版中最不能错过的新特性 2018年安卓巴士全球开发者论坛-重庆站 [线下活动]春天到了 跟小编一起去重庆嗨皮吧~ Android P 应用适配新特性1.Pr ...

  3. 电池供电应用中的电源设计:干电池特性了解、LDO与DC-DC选型设计、电流检测方案要点

    往期系列文章: 1.裸机项目开发经验分享 - 完整开发流程介绍(项目规划与执行.器件选型.资料检索.产品测试思路等) 2.裸机项目代码设计与管理 - 项目程序的组织管理.设计优化思路等经验分享 3.裸 ...

  4. [编程题]:n头牛中选择满足所有m种特性的牛(百度2021)

    [编程题]:n头牛中选择满足所有m种特性的牛 牛牛管理着一片牧场,在这片牧场中,一共有n头奶牛,为了方便统计,它们排成一排,编号为 1 - n. 现在质检员牛妹在检测这些奶牛的质量,她列出了m条特性, ...

  5. Keil中使有C99及其新特性

    Keil中使有C99及其新特性 Keil选择C99编译 C99特性介绍 Keil选择C99编译 选择C/C++,勾选C99 C99特性介绍 宏支持可变参数定义,例如 #define NRF_LOG_I ...

  6. twr java_Java7新特性 - TWR(try-with-resources)

    偶尔看到的一个关于 try()...catch() 的用法,通常我们使用 try...catch() 捕获异常的,如果遇到类似IO流的处理,要在finally部分关闭IO流,当然这个是JDK1.7之前 ...

  7. java resources 目录_Maven项目中读取src/main/resources目录下的配置文件的方法

    在Maven项目的开发中,当需要读取src/下的配置文件时,该怎么做? 我们假设Resources下有一个文件名为kafka.properties的配置文件(为什么用kafka.properties, ...

  8. Java中的Try with Resources语句介绍

    1.介绍 从Java7诞生了try-with-resources,这家伙可以在资源使用完后实现自动关闭回收.想想我们之前打开一个文件或流对象用完咋整的,是不是finally语句块中手动close的. ...

  9. Java8中一个极其强悍的新特性,很多人没用过(非常实用)

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 转自: Java的架构师技术栈 原文:http://suo.im/ ...

最新文章

  1. java gui 案例_JavaGui入门—布局的嵌套使用附实例
  2. 为什么要学习源码?学习源码对我们有用吗?
  3. 去除icon图标特效,阴影,反光
  4. java创建多级xml树_月光软件站 - 编程文档 - Java - 用XSL与XML实现多级树形菜单
  5. oracle行迁移实验,Oracle 行迁移 amp; 行链接的检测与消除
  6. [导入]Gemini翻譯為中文時的注意事項
  7. 小米POCO X3今日亮相:首发骁龙732G后置6400万四摄
  8. 对话指令集创始人兼CEO潘爱民:面向未来的新型物联网操作系统 | 人物志
  9. kuka机器人外部轴异步_KUKA机器人外部轴标准配置
  10. Atitit 深入理解抽象类与接口 attilax总结
  11. 【车牌识别】基于matlab形态学车牌识别【含Matlab源码 1155期】
  12. 剑指offer总目录
  13. 从程序员到项目经理:思维一换天地宽
  14. 统计学理论—一元线性回归
  15. ug中文字大小设置_ug10.0工具条字体大小如何修改?
  16. Iphone 和 Ipad 开发 区别
  17. 微信公众号,带参二维码/推广二维码的使用
  18. 详解CheckStyle的检查规则(共138条规则)
  19. eclipse中svn冲突解决
  20. cocos2d-x 艺术字

热门文章

  1. 面试被问到CAS原理,触及知识盲区,脸都绿了!
  2. IPSec 密钥加密体系概述
  3. 代写硕士论文 计算机 代码,天大、厦大两硕士代写买卖论文被撤销学位
  4. Django的models中ORM
  5. 【报告分享】2021中国品牌消费趋势报告-京东大数据研究院(附下载)
  6. 易连云打印机PHP接口
  7. Spring Data JDBC、引用和聚合
  8. Tableau 实现percentile分类计算功能
  9. 《Linux C编程环境》 课程大实验 及近期练习题:计算器,复写机,目录树创建,批处理执行器,扫雷
  10. C# 扫描并读取图片中的文字