日期:2014-05-20  浏览次数:20651 次

文件流close()方法使用的迷惑?
《Java2核心技术第1卷》p573:当完成了对一个流的读取或者写入后,就应该调用close方法将它关闭,这样可以释放流所占用的操作系统资源。

问题:当我使用下述方法打开流时?
BufferedReader in = new BufferedReader (new FileReader (file.getPath()));

in.clse ()//在此关闭流,那么匿名的FileReader对向是否也自动调用了close()方法?还是直接交给了垃圾回收器去处理了?

FileReader fr = new FileReader (file.getPath());
BufferedReader br = new BufferedReader(fr);

fr.close()
br.close()//是这种方法好,还是上述方法好,还有关闭一个流时的这个顺序对吗?

------解决方案--------------------
其实在调用
BufferedReader in = new BufferedReader (new FileReader (file.getPath())); 

in.clse ()//这里已经调用了FileReader 的close()方法,所以你不用担心里面流的处理,BufferedReader 的close方法就是关闭里面那个FileReader 的流

下面你说的那种方法是不必要的,只要调用
br.close()就可以了

给你源码看吧
Java code
    
// BufferedReader 的close方法,也就是关闭FileReader 的流
public void close() throws IOException {
    synchronized (lock) {
        if (in == null)
        return;
        in.close();
        in = null;
        cb = null;
    }
    }