在java编程中会遇到很多关闭资源的问题,但是,往往我们的关闭不能百分百正确,所以java7中出现了新的资源管理器方法try-with-resource,这是一项重要的改进,因为没人能再手动关闭资源时做到100%正确,有人在想Coin项目提交这一提案时,提交者宣称jdk中有三分之二的close()用法都有bug,汗颜。

java6资源管理器的做法,简写

InputStream in = null;
try{
is = url.openStream();
OutputStream out = new FileOutputStream(file);
....out.
}catch(IOException ioe){
// TODO: handle exception
}finally{
try{
if(is != null){
is.close();
}
}catch (IOException ioe2) {
// TODO: handle exception
}
}

但是在java7中我们可以这样写

URL url = new URL("www.baidu.com");
try (OutputStream output = new FileOutputStream(new File("D://stest.txt"));InputStream in=url.openStream();) {
int len;
byte[] buffer = new byte[1024*1024*5];
while((len = in.read(buffer)) >= 0){
output.write(buffer,0,len);
}
}

是的非常简便,就是把资源放在try的圆括号里就可,这段代码会在资源处理完毕时,自动关闭。

注意:

try(ObjectInputStream obj = new ObjectInputStream(new FileInputStream("somefile.bin"))){
...
}

这里的问题是,如果从(somefile.bin)创建ObjectInputStream时出错,那么FileInputStream就不会被关闭

最好的写法是为每个资源单独声明

try(InputStream in = new FileInputStream("somefile.bin");
ObjectInputStream obj = new ObjectInputStream(in)){
...
}

java-资源管理器try-with-resource的更多相关文章

  1. Java开发桌面程序学习(八)——启动浏览器或者打开资源管理器操作与hyperlink超链接的使用

    启动浏览器或者打开资源管理器 启动浏览器 java1.6版本以上,Desktop Desktop.getDesktop().browse(new URI("www.cnblogs.com/k ...

  2. Hadoop 三剑客之 —— 集群资源管理器 YARN

    一.hadoop yarn 简介 二.YARN架构         1. ResourceManager         2. NodeManager         3. ApplicationMa ...

  3. Hadoop 学习之路(二)—— 集群资源管理器 YARN

    一.hadoop yarn 简介 Apache YARN (Yet Another Resource Negotiator) 是hadoop 2.0 引入的集群资源管理系统.用户可以将各种服务框架部署 ...

  4. Hadoop 系列(二)—— 集群资源管理器 YARN

    一.hadoop yarn 简介 Apache YARN (Yet Another Resource Negotiator) 是 hadoop 2.0 引入的集群资源管理系统.用户可以将各种服务框架部 ...

  5. Oracle资源管理器(二)-- 创建和使用数据库资源计划

    (参考 http://blog.csdn.net/mrluoe/article/details/7969436 -- 整理并实践通过) 第1步,创建3个用户 SQL> create user s ...

  6. Oracle资源管理器介绍(一)

        数据库资源管理器通过控制数据库内部的执行调度来控制资源在各个会话之间的分布.通过控制所要运行的会话以及会话运行的时间长度,数据库资源管理器可以确保资源分布与计划指令相匹配,因此也符合业务目标. ...

  7. HDFS分布式文件系统资源管理器开发总结

      HDFS,全称Hadoop分布式文件系统,作为Hadoop生态技术圈底层的关键技术之一,被设计成适合运行在通用硬件上的分布式文件系统.它和现有的分布式文件系统有很多共同点,但同时,它和其他的分布式 ...

  8. Jtree(节点的渲染+资源管理器)(2)

    上一次我们建立一个比较简单的资源管理器,这次我们说一下上面的资源管理器的问题,并且得尽量的贴近windows的资源管理器. 这样一个简单的资源管理树就完成了,下面我们说说它的问题: ① 图片和外观和W ...

  9. Android应用程序资源管理器(Asset Manager)的创建过程分析

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8791064 在前面一篇文章中,我们分析了And ...

  10. 第七课 GC资源管理器实验

    <GC资源管理器> 要求: 1.定义2个资源消耗组(OLTP事务处理资源消耗组和DSS数据仓库资源消耗组) 2.创建一个日程计划schedule   3.对于OLTP资源消耗组,我们最多不 ...

随机推荐

  1. JetBrains公司介绍(Java、Python、PHP、Ruby、前端和代码测试与重构的IDE)

    JetBrains JetBrains是一家捷克的软件开发公司,该公司位于捷克的布拉格,并在俄国的圣彼得堡及美国麻州波士顿都设有办公室,该公司最为人所熟知的产品是Java编程语言开发撰写时所用的集成开 ...

  2. eclipse中修改maven仓储

    1.找到maven的setting文件,修改setting文件: 2.打开eclipce,window->Preference->maven->user Setting

  3. 从一个例子讲解拷贝构造函数与return

    #include "iostream" using namespace std; class Location { public: Location(, ) { X = xx; Y ...

  4. 累加两个php数组,键相同的累加,不同的合并

    1. $arr1=array('name'=>33,'type'=>1); $arr2=array('name'=>33,'price'=>200); $res=array() ...

  5. 转:Eclipse常用开发插件

    以下是我整理的自己开发过程中的常用Eclipse插件,按字母排序: (1)    AmaterasUML         介绍:Eclipse的UML插件,支持UML活动图,class图,sequen ...

  6. [置顶] 一个懦弱的IT人

    对自己近来的学习和工作做一个总结,规划一下未来. 还是从大三暑假说起,稀里糊涂的被拉去参加电子设计大赛,熬过了一段痛苦的时间.原本我是学计算机的,对硬件不太熟悉.不过经过一段时间痛苦的断断续续的学习, ...

  7. Delphi Xe2 后的版本如何让Delphi程序启动自动“以管理员身份运行"

    由于Vista以后win中加入的UAC安全机制,采用Delphi开发的程序如果不右键点击“以管理员身份运行”,则会报错. 在XE2以上的Delphi版本处理这个问题已经非常简单了. 右建点击工程,选择 ...

  8. 使用Mysql ID自增长时 在Mapper的<insert>里添加对应的代码

    <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Long&quo ...

  9. 各种数据库连接代码(java)

    SqlServer2000 Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); URL = "j ...

  10. Oracle错误:ORA-01033

    Oracle错误:ORA-01033 错误编码:ORA-01033: ORACLE initialization or shutdown in progress 故障描述:因为移动了数据库文件([NA ...