java关闭文本_如何更优雅的关闭java文本、网络等资源
通常在 java 中對文本、網(wǎng)絡(luò)資源等操作起來是很繁雜的,要聲明,讀取,關(guān)閉三個(gè)階段,還得考慮異常情況。假設(shè)我們要讀取一段文本顯示到控制臺(tái),通常會(huì)有如下的代碼:
public static void main(String[] args) {
FileInputStream inputStream = null;
try {
inputStream = new FileInputStream("./pom.xml");
InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");
BufferedReader reader = new BufferedReader(inputStreamReader);
String str;
while ((str = reader.readLine()) != null) {
System.out.println(str);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (inputStream != null) {
try {
inputStream.close();
} catch (Exception e) {
}
}
}
}
在 finally 的關(guān)閉代碼中,還要再來一個(gè) try/catch,看著是不是很難受,很不優(yōu)雅,很想干掉這個(gè) finally!
自從 java7 以來這個(gè)問題已經(jīng)有比較好的解決辦法了,那就是try-with-resource,可能是 jdk 開發(fā)人員也覺得之前的關(guān)閉資源寫法太反人類,所以做了這樣的一個(gè)語法糖。注意這并不是什么新特性,只是一個(gè)語法糖,簡化代碼的。如果你反編譯代碼后會(huì)發(fā)現(xiàn)還是 try/catch/finally 的傳統(tǒng)寫法。
try-with-resource 用法如下:
try (FileInputStream inputStream = new FileInputStream("./pom.xml")) {
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "utf-8"));
String str;
while ((str = reader.readLine()) != null) {
System.out.println(str);
}
} catch (Exception e) {
e.printStackTrace();
}
無需在 finally 中手動(dòng)關(guān)閉 inputStream,凡是實(shí)現(xiàn)了 AutoCloseable 接口的,且在 try 后面的括號(hào)中創(chuàng)建的,都會(huì)在 try/catch 執(zhí)行完畢后確保調(diào)用 close 方法。這么寫是不是優(yōu)雅多了??
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持聚米學(xué)院。
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的java关闭文本_如何更优雅的关闭java文本、网络等资源的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于arm下的Linux控制,基于ARM
- 下一篇: c语言bfs程序讲解,面试算法--二叉树