教科书关闭的方法是每个都需要判断是否为空,每个都调用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) {
;
}
}
就是遍历关闭