`

Java 7 新的 try-with-resources 语句,自动资源释放

    博客分类:
  • jdk7
 
阅读更多

 

从 Java 7 build 105 版本开始,Java 7 的编译器和运行环境支持新的 try-with-resources 语句,称为 ARM 块(Automatic Resource Management) ,自动资源管理。

新的语句支持包括流以及任何可关闭的资源,例如,一般我们会编写如下代码来释放资源:

 

private static void customBufferStreamCopy(File source, File target) {
    InputStream fis = null;
    OutputStream fos = null;
    try {
        fis = new FileInputStream(source);
        fos = new FileOutputStream(target);
 
        byte[] buf = new byte[8192];
 
        int i;
        while ((i = fis.read(buf)) != -1) {
            fos.write(buf, 0, i);
        }
    }
    catch (Exception e) {
        e.printStackTrace();
    } finally {
        close(fis);
        close(fos);
    }
}
 
private static void close(Closeable closable) {
    if (closable != null) {
        try {
            closable.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
 

 

代码挺复杂的,异常的管理很麻烦。

而使用 try-with-resources 语句来简化代码如下:

 

private static void customBufferStreamCopy(File source, File target) {
    try(InputStream fis = new FileInputStream(source);
        OutputStream fos = new FileOutputStream(target)){
 
        byte[] buf = new byte[8192];
 
        int i;
        while ((i = fis.read(buf)) != -1) {
            fos.write(buf, 0, i);
        }
    }
    catch (Exception e) {
        e.printStackTrace();
    }
}
 

代码清晰很多吧?在这个例子中,数据流会在 try 执行完毕后自动被关闭,前提是,这些可关闭的资源必须实现 java.lang.AutoCloseable 接口。

分享到:
评论

相关推荐

    3, Java核心技术1 带资源声明的 try 语句

    try-with-resources 语句中的资源只能是实现了java.lang.AutoCloseable接口的类实例,但是 Java SE 7 之後的所有实现了java.io.Closeable的类都实现了java.lang.AutoCloseable接口(该接口是在Java SE 7中才引入的)...

    使用Java注解处理器实现一个简单的日志记录系统.txt

    process方法用于处理日志文件,它使用了try-with-resources语句来确保资源被正确关闭。在该方法中,创建了一个FileWriter对象用于写入日志文件,并使用PrintWriter对象进行格式化输出。如果在处理过程中发生异常,会...

    jdk1.7 官方正式版64位下载

    JDK1.7新特性介绍 1. 对Java集合(Collections)的...7. 增加了try-with-resources语句,确保每个资源都在生命周期结束后被关闭 8. 使用泛型增加了类型推断机制 9. 增加了fork/join框架来增强对处理多核并行计算的支持

    积分管理系统java源码-new-and-old:实习过程中的温故知新

    其中对于流的关闭,jdk1.7以上还实现了try-with-resources语句,其原理与上述方法相同。 事务的操作以及数据库锁机制: Spring框架提供了编程式事务管理和声明式事务管理 编程式事务管理: 可以清楚地控制事务的...

    retrolambda:将Java 8的lambda表达式反向移植到Java 7、6和5

    为了在Java 1.4上运行具有泛型的Java 5代码, Retrolambda允许您在Java 7、6或5上运行带有lambda表达式,方法引用和try-with-resources语句的Java 8代码。它可以在较旧的Java运行时上运行。 转换后,它们只是一堆...

    JavaPOC:概念证明

    JavaPOC 概念验证:Apache HttpComponents获得请求,Junit,JMockit,Basic Maven POM,还更多地暴露于.gitignore概念还包括Java 7+ try-with-resources语句,该语句关闭所有可关闭的资源,而不必将它们放在finally...

    jdk7新特性jdk8新特性

    try-with-resources语句保证了每个声明了的`资源在语句结束的时候都会被关闭`。任何实现了java.lang.`AutoCloseable`接口的对象,和实现了java .io .`Closeable`接口的对象,`都可以当做资源使用`。 ``` try ( ...

    写给大忙人看的JAVA SE 8

    9.1.1 try-with-resources语句 190 9.1.2 忽略异常 191 9.1.3 捕获多个异常 192 9.1.4 更简单地处理反射方法的异常 193 9.2 使用文件 193 9.2.1 Path 194 9.2.2 读取和写入文件 196 9.2.3 创建文件和目录 197 9.2.4 ...

    Java 虚拟机面试题全面解析(干货)

    支持try-with- resources 引入 Java nio.2开发包; ·数值类型可以用2进制字符串表示,并且可以在字符串表示中添加下划线; 钻石型语法; nu值的自动处理。 Java 8 函数式接口 Lambda表达式 接口的增强 运行时数据区域...

    springmybatis

    MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plan Old Java Objects,普通的Java对象)映射成数据库中的记录. orm工具的基本思想 无论是用过的hibernate,mybatis,你都可以法相他们有一个...

Global site tag (gtag.js) - Google Analytics