广告
返回顶部
首页 > 资讯 > 后端开发 > JAVA >Java使用try-with
  • 813
分享到

Java使用try-with

java教程Java 2016-07-22 02:07:35 813人浏览 猪猪侠
摘要

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

在Java编程过程中,如果打开了外部资源(文件、数据库连接、网络连接等),我们必须在这些外部资源使用完毕后,手动关闭它们。 (推荐学习:java课程)

因为外部资源不由JVM管理,无法享用JVM的垃圾回收机制,如果我们不在编程时确保在正确的时机关闭外部资源,就会导致外部资源泄露,紧接着就会出现文件被异常占用,数据库连接过多导致连接池溢出等诸多很严重的问题。

为了确保外部资源一定要被关闭,通常关闭代码被写入finally代码块中,当然我们还必须注意到关闭资源时可能抛出的异常,于是变有了下面的经典代码

public static void main(String[] args) {
    FileInputStream inputStream = null;
    try {
        inputStream = new FileInputStream(new File("test"));
        System.out.println(inputStream.read());
    } catch (ioException e) {
        throw new RuntimeException(e.getMessage(), e);
    } finally {
        if (inputStream != null) {
            try {
                inputStream.close();
            } catch (IOException e) {
                throw new RuntimeException(e.getMessage(), e);
            }
        }
    }
}

换成try-with-resource

public static void main(String[] args) {
    try (FileInputStream inputStream = new FileInputStream(new File("test"))) {
        System.out.println(inputStream.read());
    } catch (IOException e) {
        throw new RuntimeException(e.getMessage(), e);
    }
}

再以一个java里面读取文件和写入文件为例子


package Advanced;
 
import java.io.File;
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileWriter;
public class ReadTxt1 {
    public  static void main(String args[]) {
        try { // 防止文件建立或读取失败,用catch捕捉错误并打印,也可以throw
            
            String pathname = "E:python_fileWEB_spiderinput.txt"; // 绝对路径或相对路径都可以,这里是绝对路径,写入文件时演示相对路径
            File filename = new File(pathname); // 要读取以上路径的input。txt文件
            InputStreamReader reader = new InputStreamReader(
            new FileInputStream(filename)); // 建立一个输入流对象reader
            BufferedReader br = new BufferedReader(reader); // 建立一个对象,它把文件内容转成计算机能读懂的语言
            String line = "";
            line = br.readLine();
            while (line != null) {
                line = br.readLine(); // 一次读入一行数据
                System.out.println(line);
            }
            
            File writename = new File("E:Python_fileweb_spideroutput.txt"); // 相对路径,如果没有则要建立一个新的output。txt文件
            writename.createNewFile(); // 创建新文件
            BufferedWriter out = new BufferedWriter(new FileWriter(writename));
            out.write("开始写入文件啦
"); // 
即为换行
            out.flush(); // 把缓存区内容压入文件
            out.close(); // 最后记得关闭文件
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

当一个外部资源的句柄对象实现了AutoCloseable接口,jdk7中便可以利用try-with-resource语法更优雅的关闭资源,消除板式代码。

在JDK7以前,Java没有自动关闭外部资源的语法特性,直到JDK7中新增了try-with-resource语法,那么将上面java的读文件和写文件重新按照try-with-resource语法实现


package Advanced;
import java.io.*;
public class ReadTxt {
    public static void main(String args[]) {
        readFile();
        writeFile();
    }
    
    public static void readFile() {
        String pathname = "E:python_fileweb_spiderinput.txt";
        // 绝对路径或相对路径都可以,写入文件时演示相对路径,
        // 读取以上路径的input.txt文件
        //防止文件建立或读取失败,用catch捕捉错误并打印,也可以throw;
        //不关闭文件会导致资源的泄露,读写文件都同理
        //Java7的try-with-resources可以优雅关闭文件,异常时自动关闭文件;详细解读https://stackoverflow.com/a/12665271
        try (FileReader reader = new FileReader(pathname);
             BufferedReader br = new BufferedReader(reader)
             // 建立一个对象,它把文件内容转成计算机能读懂的语言
        ) {
            String line;
            //推荐更加简洁的写法
            while ((line = br.readLine()) != null) {
                // 一次读入一行数据
                System.out.println(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
    public static void writeFile() {
        try {
            File writeName = new File("E:python_fileweb_spideroutput2.txt"); // 相对路径,如果没有则要建立一个新的output.txt文件
            writeName.createNewFile(); // 创建新文件,有同名的文件的话直接覆盖
            try (FileWriter writer = new FileWriter(writeName);
                 BufferedWriter out = new BufferedWriter(writer)
            ) {
                out.write("我开始写入文件啦1
"); // 
即为换行
                out.write("我开始写入文件啦2
"); // 
即为换行
                out.flush(); // 把缓存区内容压入文件
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

将外部资源的句柄对象的创建放在try关键字后面的括号中,当这个try-catch代码块执行完毕后,Java会确保外部资源的close方法被调用。简洁很多。

try-with-resource语法涉及的另外一个知识点,叫做异常抑制。当对外部资源进行处理(例如读或写)时,如果遭遇了异常,且在随后的关闭外部资源过程中,又遭遇了异常,那么你catch到的将会是对外部资源进行处理时遭遇的异常,关闭资源时遭遇的异常将被“抑制”但不是丢弃,通过异常的getSuppressed方法,可以提取出被抑制的异常。

try-with-resource时,如果对外部资源的处理和对外部资源的关闭均遭遇了异常,“关闭异常”将被抑制,“处理异常”将被抛出,但“关闭异常”并没有丢失,而是存放在“处理异常”的被抑制的异常列表

--结束END--

本文标题: Java使用try-with

本文链接: https://www.lsjlt.com/news/4348.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java使用try-with
    在Java编程过程中,如果打开了外部资源(文件、数据库连接、网络连接等),我们必须在这些外部资源使用完毕后,手动关闭它们。 (推荐学习:java课程)因为外部资源不由JVM管理,无法享用JVM的垃圾回收机制,如果我们不在编程时确保在正...
    99+
    2016-07-22
    java教程 Java
  • 关于Java中的try-with-resources语句
    目录介绍语法介绍 try-with-resources是Java中的环绕语句之一,旨在减轻开发人员释放try块中使用的资源的义务。 它最初在Java 7中引入,背后的全部想法是,开发...
    99+
    2023-05-19
    Java try-with-resources Java try块
  • java面试try-with-resources问题解答
     前言: 这个语句的作用是,确保该语句执行之后,关闭每一个资源,也就是说它确保了每个资源都在生命周期结束之后被关闭,因此,比如读写文件,我们就不需要显示的调用close()...
    99+
    2022-11-13
  • java中怎么使用try-with-resource机制关闭连接
    本篇内容主要讲解“java中怎么使用try-with-resource机制关闭连接”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java中怎么使用try-with-resource机制关闭连接”...
    99+
    2023-06-20
  • try-cache-finally读取文件错误try-with-resources使用方法
    目录引言try-cache-finallytry-with-resourcestry-with-resources 语句能放多个资源,使用 ; 分割try-with-resource...
    99+
    2023-02-13
    try-with-resources读取文件 try-cache-finally
  • Java try()语句实现try-with-resources异常管理机制操作
    目录Java try()语句实现try-with-resources异常管理机制不使用try-with-resources时,使用的资源要在finally中进行释放使用try-wit...
    99+
    2022-11-12
  • Java异常--常见方法--自定义异常--增强try(try-with-resources)详解
    目录异常方法自定义异常作用定义增强try(try-with-resources)作用条件jdk7jdk9异常方法 //返回此可抛出对象的详细信息消息字符串 public String...
    99+
    2023-03-14
    java自定义异常 java增强try java try-with-resources
  • 如何使用try-with-resource机制关闭连接
    使用try-with-resource机制关闭连接 JAVA的一大特性就是JVM会对内部资源实现自动回收 即自动GC,给开发者带来了极大的便利。但是JVM对外部资源的引用却无法自动回...
    99+
    2022-11-12
  • java中怎么使用try-with-resource实现输入输出流自动关闭
    本篇内容介绍了“java中怎么使用try-with-resource实现输入输出流自动关闭”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!tr...
    99+
    2023-06-20
  • 使用try-with-resource的输入输出流自动关闭
    try-with-resource的输入输出流自动关闭 最近在做代码审核的时候,审核工具提示我将 try-catch-finally 给替换掉,而且根据公司相关要求,该提示的级别还不...
    99+
    2022-11-12
  • 怎么使用Java try和catch
    本篇内容介绍了“怎么使用Java try和catch”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!  尽管...
    99+
    2022-10-19
  • java中try 与catch的使用
    try{ //代码区 }catch(Exception e){ //异常处理 } 代码区如果有错误,就会返回所写异常的处理。   首先要清楚,如果没有try的话,出现异常会导致程序崩溃。 而try则可以保证程序的正常运行下去,比如说: tr...
    99+
    2023-09-09
    java jvm servlet
  • try-catch怎么在java中使用
    本篇文章给大家分享的是有关try-catch怎么在java中使用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Java的特点有哪些Java的特点有哪些1.Java语言作为静态面...
    99+
    2023-06-14
  • Java try和catch的使用方法
    本篇内容介绍了“Java try和catch的使用方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!为防止和处理一个运行时错误,只需要把你所...
    99+
    2023-06-02
  • 怎么使用Try
    这篇文章主要介绍“怎么使用Try”,在日常操作中,相信很多人在怎么使用Try问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么使用Try”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!Java的Option...
    99+
    2023-06-15
  • Java异常处理try catch的基本使用
    目录1. 异常1.1 try…catch异常处理1.2 多catch并行处理1.3 throw和throws 关键字的使用1.4 finally代码块1.5 Runti...
    99+
    2022-11-13
  • 为什么不使用try-catch-finally处理Java异常
    本篇内容主要讲解“为什么不使用try-catch-finally处理Java异常”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“为什么不使用try-catch-finally处理Java异常”吧!...
    99+
    2023-06-15
  • Java深入讲解异常处理try catch的使用
    目录1.try-catch异常处理说明2.try-catch异常处理细节示例01测试结果01示例02测试结果021.try-catch异常处理说明 Java提供try和catch块来...
    99+
    2022-11-13
  • python之try except的使用
    1.try-except常用语法: try仅有一块,但是except可以有多个 try: 可能产生异常的代码块except [ (Error1, Error2, ... ) [as e] ]: 处理异常的代码块1except [...
    99+
    2023-10-11
    python
  • Java异常处理try catch怎么用
    这篇文章将为大家详细讲解有关Java异常处理try catch怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。我们编译运行程序出错的时候,编译器就会抛出异常。抛出异常要比终止程序灵活许多,这...
    99+
    2023-06-21
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作