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

java的io中的文件关闭问题!
如题。代码如下!
Java code

import java.io.*;

public class TestBufferStream1 {
    public static void main(String args[]) {
        try
        {
            FileInputStream fis = new FileInputStream("c:/java/IO/TestFileInputStream.java");
            BufferedInputStream bis = new BufferedInputStream(fis);
            int c = 0;
            System.out.println(bis.read());
            System.out.println(bis.read());
            bis.mark(100);
            for(int i = 0; i < 10 && ((c = bis.read()) != -1); i ++ ) {
                System.out.print((char)c + " ");
            }
            bis.reset();
            System.out.println();
            for(int i = 0; i < 10 && ((c = bis.read()) != -1); i ++ ) {
                System.out.print(c + " ");
            }
            bis.close();           //为什么fis不用关闭那!?
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }
}



------解决方案--------------------
bis.close(); 的关闭里会把你构造函数里传给它的FileInputStream给close掉的。
所以fis 不用关了。
------解决方案--------------------
缓冲流关闭就可以了,它会调用内层的流关闭方法
------解决方案--------------------
FileInputStream是文件输入流,BufferedInputStream是对FileInputStream进行了一个包装,因此只要把bis.close()关闭了fis文件