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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。