如下,我如何在try catch里判断br和bw已经close()了?
BufferedReader br = new BufferedReader(new FileReader(args[1]));
BufferedWriter bw = new BufferedWriter(new FileWriter(args[2],true));
当close时,如果你还在进行IO操作
会抛出这样一个异常
throw
new
IOException(
"Stream closed"
);
所以,你可以捕捉异常信息的关键字,
检查是否有 closed 关键字
来判断对应的流是否已关闭
try
{
// IO操作
}
catch
(Exception e) {
String err = e.getMessage();
if
(err !=
null
&& err.indexOf(
"closed"
) >
0
) {
// 证明对应的流已关闭
}
}
我是要这样: 判断是否是close状态,如果不是,那么close()
Reader确实没有isClosed方法,所以其实你直接调用close就好了,Reader重复close并没有什么资源消耗
finaly 中判断流对象是否为null,不能null就关闭它,不需要try中关一次,catch中再判断关一次
一般用br==null来判断该流是否被关闭,null是关闭了,非null就需要关闭。
重复close会报错
既然你没法保证只在用完后close一次,
重复调用又会出错
那么就对你调用 close 方法的地方 try-catch 一下呗
catch 中什么都不输出
finaly 中判断流对象是否为null,99LRC歌词不能null就关闭它,不需要try中关一次,catch中再判断关一次
这种问题,要靠良好的代码习惯。经典代码如下:
InputStream in = null;
try {
in = new ... ;
while((int r = in.read()) != -1) {
...
}
}catch (IOException e) {
...
} finally {
if (in != null) { // 如果创建in的时候就出错,在in为null,无须处理。
try {
in.close();
} catch (IOException e) {
....;
}
}
}