try {
/*
 * openFileInput(String)是父类提供的方法, 可以直接获取data目录下指定文件的输入流
 */
FileInputStream fis = openFileInput("info.txt");
              //// 从文件字节输入流转为 字节转字符输入流  ,然后再转为缓存字符流, 
BufferedReader bf = new BufferedReader(new InputStreamReader(
fis));
// 因为保存时数据只有一行,因此读取一次就可以
String readLine = bf.readLine();
bf.close();
/*
 * 数据是用户名##密码的形式存储的, 因此需要根据##对字符串进行切割
 */
为什么不写fis.close()?

解决方案 »

  1.   

    这个问题在群里问了一下,有人解释因为fis是做为InputStreamReader的参数,匿名内部类作为BufferReader参数,所以到外部的bf关闭的时候里面的会一起关闭。
      

  2.   

    是这样的,当fis作为BufferedReader的参数时,当BufferedReader的对象关闭时,内部参数fis会自动关闭。
      

  3.   

    Java所有的流都是互相包装的方式实现的,关闭的时候会把关联的流一起关闭。
    之前遇到过从System.in创建了多个Scanner,然后依次关闭时抛出异常:流已经被关闭的问题,是相同的原因。