Java 类库中有许多必须通过调用close方法来手工关闭资源,例如InputStream、OutputStream等等。
根据经验,try-finally语句的finally块会经常被用来做资源的释放,例如:
public static String txt2String(File file) throws IOException {
StringBuilder result = new StringBuilder();
BufferedReader br = new BufferedReader(new FileReader(file));
try{
String s = null;
while((s = br.readLine()) != null) {
result.append(System.lineSeparator() + s);
}
}catch(Exception e){
e.printStackTrace();
} finally {
br.close();
}
return result.toString();
}
Java 7以后可以用try-with-source的方式:
public static String txt2StringByTryWithResources(File file) throws IOException{
StringBuilder result = new StringBuilder();
try(BufferedReader br = new BufferedReader(new FileReader(file))) {
String s = null;
while((s = br.readLine()) != null) {
result.append(System.lineSeparator() + s);
}
}
return result.toString();
}
这样让代码更加简洁,并且不会忘记释放资源,对异常诊断也大有裨益。
注意:使用try-with-sources必须保证实现AutoCloseable接口。