求助:close状态问题!

如下,我如何在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) {
            ....;
        }
    }
}

 
发布了79 篇原创文章 · 获赞 2 · 访问量 2255

猜你喜欢

转载自blog.csdn.net/liuji0517/article/details/104855757
今日推荐