为什么不写fis.close()?

Seachal 2016-06-08 10:43:09
try {
/*
* openFileInput(String)是父类提供的方法, 可以直接获取data目录下指定文件的输入流
*/
FileInputStream fis = openFileInput("info.txt");
//// 从文件字节输入流转为 字节转字符输入流 ,然后再转为缓存字符流,
BufferedReader bf = new BufferedReader(new InputStreamReader(
fis));
// 因为保存时数据只有一行,因此读取一次就可以
String readLine = bf.readLine();
bf.close();
/*
* 数据是用户名##密码的形式存储的, 因此需要根据##对字符串进行切割
*/
为什么不写fis.close()?
...全文
330 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
gamedev˚ 2016-06-28
  • 打赏
  • 举报
回复
引用 2 楼 Zhangxichao100 的回复:
这个问题在群里问了一下,有人解释因为fis是做为InputStreamReader的参数,匿名内部类作为BufferReader参数,所以到外部的bf关闭的时候里面的会一起关闭。
是这样的,当fis作为BufferedReader的参数时,当BufferedReader的对象关闭时,内部参数fis会自动关闭。
解开者 2016-06-28
  • 打赏
  • 举报
回复
Java所有的流都是互相包装的方式实现的,关闭的时候会把关联的流一起关闭。 之前遇到过从System.in创建了多个Scanner,然后依次关闭时抛出异常:流已经被关闭的问题,是相同的原因。
sky_08_06_02 2016-06-28
  • 打赏
  • 举报
回复
Seachal 2016-06-09
  • 打赏
  • 举报
回复
这个问题在群里问了一下,有人解释因为fis是做为InputStreamReader的参数,匿名内部类作为BufferReader参数,所以到外部的bf关闭的时候里面的会一起关闭。
bree06 2016-06-09
  • 打赏
  • 举报
回复
按理应该是要写的,你再看看父类有没有什么特殊处理

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧