try-with-resources
FileInputStream fis = new FileInputStream(file)
放在 try ()
括号里面是 Java 7 引入的 try-with-resources 语句。 它的作用是:
-
资源自动管理:
try-with-resources
确保在try
块执行完毕后,无论是否发生异常,声明在try()
中的资源都会被自动关闭。 这意味着你不再需要显式地在finally
块中关闭FileInputStream
,从而避免了资源泄漏的风险。 -
代码简洁: 使用
try-with-resources
可以使代码更简洁易读,因为它消除了显式关闭资源的需要。 -
异常处理: 如果关闭资源时发生异常,该异常会被抑制,并添加到原始异常的 suppressed 异常列表中。 这使得你可以更清晰地看到导致问题的根本原因。
工作原理:
try-with-resources
语句适用于实现了 java.lang.AutoCloseable
接口的资源。 FileInputStream
实现了 AutoCloseable
接口,因此可以安全地在 try-with-resources
语句中使用。
当 try
块执行完毕时(无论是正常完成还是由于异常),try-with-resources
语句会自动调用资源的 close()
方法。 FileInputStream
的 close()
方法会释放与文件相关的系统资源。
等效代码(不使用 try-with-resources):
FileInputStream fis = null;
try {fis = new FileInputStream(file);// 使用 fis 进行文件操作
} catch (IOException e) {// 处理异常
} finally {if (fis != null) {try {fis.close();} catch (IOException e) {// 处理关闭流时可能发生的异常}}
}
可以看到,使用 try-with-resources
语句可以大大简化代码,并提高代码的可靠性。