java try释放资源,try with resources语句

  java try释放资源,try with resources语句

  如何解决写爬虫IP受阻的问题?立即使用。

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

  因为外部资源不是JVM管理的,所以我们无法享受JVM的垃圾收集机制。如果在编程时没有确保在合适的时间关闭外部资源,就会导致外部资源的泄漏,随之而来的就是文件占用异常、数据库连接数过多、连接池溢出等诸多严重问题。

  为了确保必须关闭外部资源,通常会将关闭代码写入finally代码块。当然,也要注意资源关闭时可能抛出的异常,于是有了下面的经典代码。

  公共静态void main(String[] args) {

  FileInputStream输入流=null

  尝试{

  inputStream=new FileInputStream(新文件( test ));

  system . out . println(inputstream . read());

  } catch (IOException e) {

  抛出新的RuntimeException(e.getMessage(),e);

  }最后{

  if (inputStream!=null) {

  尝试{

  inputstream . close();

  } catch (IOException e) {

  抛出新的RuntimeException(e.getMessage(),e);

  }

  }

  }

  }换成try-with-resource

  公共静态void main(String[] args) {

  try(File inputStream inputStream=new File inputStream(new File( test )){

  system . out . println(inputstream . read());

  } catch (IOException e) {

  抛出新的RuntimeException(e.getMessage(),e);

  }

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

  /**

  * @作者zhangsf

  * @CreateTime 2019/11/27 - 13:05

  */

  包高级;

  导入Java . io . file;

  导入Java . io . inputstreamreader;

  导入Java . io . buffered reader;

  导入Java . io . buffered writer;

  导入Java . io . file inputstream;

  导入Java . io . filewriter;

  公共类ReadTxt1 {

  公共静态void main(String args[]) {

  尝试{//防止文件创建或读取失败,捕捉错误并用catch打印它们,或者抛出它们。

  /*读入TXT文件*/

  string pathname= E:\ \ python _ file \ \ web _ spider \ \ input . txt ;//可以使用绝对路径或相对路径。这里是绝对路径。写入文件时显示相对路径。

  文件文件名=新文件(路径名);//读取上述路径的输入。Txt文件

  InputStreamReader reader=新的InputStreamReader(

  新文件输入流(文件名));//构建输入流对象读取器

  buffered reader br=new buffered reader(reader);//创建一个对象,将文件内容转换为计算机可读的语言。

  字符串行=“”;

  line=br . readline();

  而(行!=null) {

  line=br . readline();//一次读入一行数据

  system . out . println(line);

  }

  /*写入Txt文件*/

  File write name=new File( E:\ \ python _ File \ \ web _ spider \ \ output . txt );//相对路径,如果不是,将建立一个新的输出。Txt文件

  write name . create new file();//创建新文件

  buffered writer out=new buffered writer(new file writer(write name));

  Out.write(开始写入文件\ r \ n );//\ r \ n表示换行。

  out . flush();//将缓冲区的内容压入文件

  out . close();//最后记得关闭文件

  } catch(异常e) {

  e . printstacktrace();

  }

  }

  }当外部资源的handle对象实现AutoCloseable接口时,JDK7可以使用try-with-resource的语法来更优雅地关闭资源,消除板代码。

  在JDK7之前,java没有自动关闭外部资源的语法特性。直到JDK7增加了try-with-resource的语法,然后上面Java的读写文件又是按照try-with-resource的语法实现的。

  /**

  * @作者zhangsf

  * @CreateTime 2019/11/27 - 11:44

  */

  包高级;

  导入Java . io . *;

  公共类ReadTxt {

  公共静态void main(String args[]) {

  readFile();

  writeFile();

  }

  /**

  *读取TXT文件

  */

  公共静态void readFile() {

  string pathname= E:\ \ python _ file \ \ web _ spider \ \ input . txt ;

  //可以使用绝对路径或相对路径。演示写文件时的相对路径,

  //读取上述路径的input.txt文件

  //为防止文件创建或读取失败,使用catch捕捉错误并打印出来,或者抛出;

  //不关闭文件会导致资源泄露。读写文件也是如此。

  //Java7的try-with-resources可以优雅地关闭文件,出现异常时自动关闭文件;细读https://stackoverflow.com/a/12665271

  try(FileReader reader=new FileReader(路径名);

  BufferedReader br=新的BufferedReader(阅读器)

  //创建一个对象,将文件内容转换为计算机可读的语言。

  ) {

  弦线;

  //推荐一个更简洁的写法

  while ((line=br.readLine())!=null) {

  //一次读入一行数据

  system . out . println(line);

  }

  } catch (IOException e) {

  e . printstacktrace();

  }

  }

  /**

  *写入TXT文件

  */

  公共静态void writeFile() {

  尝试{

  File write name=new File( E:\ \ python _ File \ \ web _ spider \ \ output 2 . txt );//相对路径,如果不是,创建一个新的output.txt文件。

  write name . create new file();//新建一个文件,如果有同名文件直接覆盖。

  try(FileWriter writer=new FileWriter(write name);

  buffered writer out=new buffered writer(writer)

  ) {

  Out.write(我开始写文件^ 1 \ r \ n );//\ r \ n表示换行。

  Out.write(我开始写文件2 \ r \ n );//\ r \ n表示换行。

  out . flush();//将缓冲区的内容压入文件

  }

  } catch (IOException e) {

  e . printstacktrace();

  }

  }

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

  try-with-resource语法涉及的另一个知识点叫做异常抑制。如果您在处理(例如,读取或写入)外部资源时遇到异常,并且在关闭外部资源的后续过程中遇到另一个异常,您将捕获处理外部资源时遇到的异常,关闭资源时遇到的异常将被“抑制”但不会被丢弃。被抑制的异常可以通过exception getSuppressed方法提取。

  try-with-resource时,如果外部资源的处理和关闭遇到异常,关闭异常将被抑制,处理异常将被抛出,但关闭异常不会丢失,而是存储在处理异常中的抑制异常列表中。这是Java通过使用try-with-resource优雅关闭资源的细节。请关注其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: