操作文件如何关闭流

时间:2021-10-31 09:31:44
任意的文件操作都要用到多个流,在操作结束时是否每个都要关闭呢???有没有顺序要求?

FileInputStream fis=new FileInputStream(fleLibary);
BufferedInputStream bis=new BufferedInputStream(fis);
DataInputStream dis=new DataInputStream(bis);
dis.close()
bis.close()
fis.close()

13 个解决方案

#1


有要求,从内层向外层关闭

#2


引用 1 楼 crystalangle 的回复:
有要求,从内层向外层关闭

同意

#3


按理说,应该是:“和栈的顺序一样,先开的后关,后开得先关”
不过刚才测试了一下,先关那个都不会报错,我也有此疑问


引用别人的一句话“Java是用来做开发的,不是用来研究完美理论的”,
所以请允许java的一些“不合理/不完美之处”

#4


这里有个问题,很多代码是这样写的

DataInputStream dis=new DataInputStream(new BufferedInputStream(new FileInputStream(fleLibary)));


在这种情况下不可能人工关闭全部流,所以我有疑问是否外层在close后会自动调用内部close

#5


up

#6


引用 4 楼 smartcatiboy 的回复:
这里有个问题,很多代码是这样写的

Java codeDataInputStream dis=new DataInputStream(new BufferedInputStream(new FileInputStream(fleLibary)));

在这种情况下不可能人工关闭全部流,所以我有疑问是否外层在close后会自动调用内部close

经过装饰的流,只关dis就行了

#7


引用 6 楼 closewbq 的回复:
引用 4 楼 smartcatiboy 的回复:
这里有个问题,很多代码是这样写的

Java codeDataInputStream dis=new DataInputStream(new BufferedInputStream(new FileInputStream(fleLibary)));

在这种情况下不可能人工关闭全部流,所以我有疑问是否外层在close后会自动调用内部close

经过装饰的流,只关dis就行了

同意

#8


mark

#9


有顺序,有内到外,你上面写的就是对的,文件操作的大部分都要写到try{}catch(){}内,特别是关闭操作

#10


学习了,以前还真没注意这些细节

#11


学些。。。。

#12


只要关闭一个就行,只要关闭最外层的那个流。

#13


谢谢各位回复
分数不多,考虑到这个问题是经验为主,或者需要比较深入的了解,而非代码解决,所以分主要给星号。

#1


有要求,从内层向外层关闭

#2


引用 1 楼 crystalangle 的回复:
有要求,从内层向外层关闭

同意

#3


按理说,应该是:“和栈的顺序一样,先开的后关,后开得先关”
不过刚才测试了一下,先关那个都不会报错,我也有此疑问


引用别人的一句话“Java是用来做开发的,不是用来研究完美理论的”,
所以请允许java的一些“不合理/不完美之处”

#4


这里有个问题,很多代码是这样写的

DataInputStream dis=new DataInputStream(new BufferedInputStream(new FileInputStream(fleLibary)));


在这种情况下不可能人工关闭全部流,所以我有疑问是否外层在close后会自动调用内部close

#5


up

#6


引用 4 楼 smartcatiboy 的回复:
这里有个问题,很多代码是这样写的

Java codeDataInputStream dis=new DataInputStream(new BufferedInputStream(new FileInputStream(fleLibary)));

在这种情况下不可能人工关闭全部流,所以我有疑问是否外层在close后会自动调用内部close

经过装饰的流,只关dis就行了

#7


引用 6 楼 closewbq 的回复:
引用 4 楼 smartcatiboy 的回复:
这里有个问题,很多代码是这样写的

Java codeDataInputStream dis=new DataInputStream(new BufferedInputStream(new FileInputStream(fleLibary)));

在这种情况下不可能人工关闭全部流,所以我有疑问是否外层在close后会自动调用内部close

经过装饰的流,只关dis就行了

同意

#8


mark

#9


有顺序,有内到外,你上面写的就是对的,文件操作的大部分都要写到try{}catch(){}内,特别是关闭操作

#10


学习了,以前还真没注意这些细节

#11


学些。。。。

#12


只要关闭一个就行,只要关闭最外层的那个流。

#13


谢谢各位回复
分数不多,考虑到这个问题是经验为主,或者需要比较深入的了解,而非代码解决,所以分主要给星号。