教科书关闭的方法是每个都需要判断是否为空,每个都调用close。而且每个都需要在自己的try catch里面调用
如下图
InputStream is=null;
InputStreamReader isr=null;
BufferedReader read=null;
try {
is = new FileInputStream(new File(""));
isr = new InputStreamReader(is);
read = new BufferedReader(isr);
String s = read.readLine();
} finally {
try {
if(null!=is){
is.close();
}
}catch (Exception e){
e.printStackTrace();
}
try {
if(null!=isr){
isr.close();
}
}catch (Exception e){
e.printStackTrace();
}
try {
if(null!=read){
read.close();
}
}catch (Exception e){
e.printStackTrace();
}
}
但是io对象都来自接口Closeable,可以通过这个来关闭。
通过apache的ioutil包提供了良好的方法
如下图
InputStream is=null;
InputStreamReader isr=null;
BufferedReader read=null;
try {
is = new FileInputStream(new File(""));
isr = new InputStreamReader(is);
read = new BufferedReader(isr);
String s = read.readLine();
} finally {
IOUtils.closeQuietly(read,isr,is);
}
查看源代码
public static void closeQuietly(Closeable... closeables) { if (closeables != null) { Closeable[] arr$ = closeables; int len$ = closeables.length; for(int i$ = 0; i$ < len$; ++i$) { Closeable closeable = arr$[i$]; closeQuietly(closeable); } } }
public static void closeQuietly(Closeable closeable) { try { if (closeable != null) { closeable.close(); } } catch (IOException var2) { ; } }
就是遍历关闭