在处理必须关闭的资源时,始终要先考虑用try-with-resources。因为finally块中的代码可能也会抛出异常,后一个异常会完全抹除第一个异常,堆栈中不会记录第一个异常。如果改用try-with-resources,后面的异常会被终止,以保留第一个异常。
//范例1
static String firstLineOfFile(String path) throws IOException{
try(**BufferedReader br = new BufferedReader(new FileReader(path))**){
return br.readLine();
}
}
//范例2
static void copy(String src,String dst) throws IOException{
try(**InputStream in = new FileInputStream(src);
OutputStream out = new FileOutputStream(dst)**)
){
byte[] buf = new byte[BUFFER_SIZE];
int n;
while((n = in.read(buf) >= 0))
out.write(buf,0,n);
}
}
//范例3
static String firstLineOfFile(String path,String defaultVal) {
try(**BufferedReader br = new BufferedReader(new FileReader(path))**){
return br.readLine();
}catch(IOException e){
return defaultVal;
}
}