这个FileReader如何“关闭”?

时间:2012-03-02 23:06:09

标签: java

考虑以下事件序列

public static void main(String[] a) throws IOException {

    FileReader f = new FileReader(a[0]);

    System.out.println(f.ready()); // true

    doSomethingWithReader(f);

    System.out.println(f.ready()); // false
}

private static String doSomethingWithReader(FileReader reader) {

    BufferedReader br = null;

    try {
        br = new BufferedReader(reader);
        ...
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            br.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    return line;
}

FileReader在任何地方都没有关闭,但关闭它的是什么?

6 个答案:

答案 0 :(得分:9)

当您使用FileReader打包Reader(或任何BufferedReader)时,在.close()上调用BufferedReader将关闭已包装/的基础{{} 1}}。

适用于所有可用作包装器的标准Reader,Writer,OutputStream和InputStream类都是如此。

答案 1 :(得分:3)

br.close();

关闭你的读者。

答案 2 :(得分:2)

查看implementation of BufferedReader:[open jdk7 implementation]

public  void close() throws IOException 

{
        synchronized (lock) {
            if (in == null)
                return;
            in.close();
            in = null;
            cb = null;
        }
}

它会照顾close()基础FileReader

答案 3 :(得分:0)

关闭BufferedReader也会关闭它所包含的Reader,所以在这种情况下,这是FileReader

答案 4 :(得分:0)

无论是否抛出异常,finally块都会执行。在finally块中,关闭包装文件读取器的缓冲读取器。关闭缓冲的阅读器将关闭所有基础流,包括文件阅读器使用的流。

答案 5 :(得分:0)

根据BufferedReader的文档,当你关闭br时(在finally块中),用于构造br的FileReader也会被关闭。