程序未关闭FileInputStream就终止时,被访问文件的状态技术咨询
未关闭
FileInputStream就终止程序?别慌,后果没你想的糟 作为常年跟Java IO打交道的开发者,我来给你掰扯清楚这个问题:这种情况既不会残留打开的文件句柄,也不会让文件乱掉,最终是无异常的安全状态,具体原因如下:
操作系统会兜底回收句柄:不管你的Java程序是正常退出还是意外崩溃,进程一旦终止,操作系统就会把这个进程占用的所有系统资源(包括打开的文件句柄)全部回收。所以哪怕你没手动调用
close(),也不会出现文件句柄一直被占用的情况——毕竟进程都没了,谁还拿着句柄呢?只读流不会搞坏文件:
FileInputStream是纯读操作的流,它从头到尾都只是读取文件内容,不会对文件做任何写入、修改操作。哪怕中途直接终止程序,文件本身的内容和结构都不会被改动,自然不会处于混乱状态。好习惯还是得提一嘴:虽然操作系统会帮我们擦屁股,但在日常开发里,还是推荐用Java 7引入的
try-with-resources语法来管理流资源,比如:try (FileInputStream fis = new FileInputStream("A.txt")) { // 这里写读取文件的逻辑 } catch (IOException e) { // 处理IO异常 }这种写法会自动帮我们关闭流,不管代码是正常执行完还是抛出异常,都能避免在长期运行的服务中出现资源泄漏(比如循环里反复打开流不关闭,那才会真的搞出句柄泄漏问题)。
内容的提问来源于stack exchange,提问作者MarkHammons
相关产品推荐
相关产品推荐

