java - 我需要在每个新的输入流上调用 close() 吗?
问题描述
这是代码。
public static void main(String[] args) throws IOException {
FileInputStream fis = null;
fis = new FileInputStream(new File("D:\\za180s.ser"));
// do something
fis = new FileInputStream(new File("D:\\za185s.ser"));
// do something
fis = new FileInputStream(new File("D:\\za186s.ser"));
// do something
fis = new FileInputStream(new File("D:\\za187s.ser"));
// do something
fis.close();
}
问题是:我需要在每次“做某事”之后调用 fis.close() 方法,或者我只调用 fis.close() 一次。
忽略 finally 中的 close() 位置和代码是否需要 try catch。
谢谢大家。
解决方案
是的,您需要在每个人上调用 close InputStream
。您的代码的问题是fis
每次创建新流时都要重新分配变量。换句话说:fis
不再指向 old InputStream
,所以调用 close 不会关闭前一个流。
有关更多信息,请查看https://stackoverflow.com/a/40523/8819761
您还可以使用 Java 7 的 try-with-resources 语法,一旦您退出 try 块,它将自动关闭流:
try (InputStream fis = new FileInputSteam(yourFile)) {
// Do something
}
try (InputStream fis = new FileInputSteam(yourFile)) {
// Do something else
}
推荐阅读
- django - 更新表单时Formset显示无效
- android - Android:设置偏好意图不起作用
- c - 如何通过c中的套接字发送二进制数据?
- android - 方法调用语法问题
- spring-boot - JUnit 5 单元测试 Get 和 Post 方法
- node.js - 如何在 Azure 应用服务上创建可连接的 websocket 服务器?
- html - 尽管等待 `canplaythrough` 事件到 `play()`,但 HTML5 视频缓冲
- php - 对列“serialNo”的mysql查询只返回第一行
- c++ - size_t 的大小和对齐方式是否与 ptrdiff_t 相同?
- jquery - Ajax 调用 div 替换并滚动到页面顶部