1.通用关闭流工具
/**
* 通用关闭流 工具
* @param closeables
*/
private void closeStream(Closeable... closeables) {
if(ArrayUtil.isEmpty(closeables)){
for (int i = 0; i < closeables.length; i++) {
if(null != closeables[i]) {
try {
closeables[i].close();
} catch (Exception e){
log.error("关闭输入流异常 [{}]", e);
}
}
}
}
}
2.安全的流关闭方式
Java中流的安全关闭可以通过使用try-with-resources语句来实现。这种语句可以确保在代码块执行完毕后,自动关闭流。例如,使用try-with-resources关闭文件输入流可以像这样:
在这个示例中,使用try-with-resources语句声明了一个FileInputStream对象,然后在try代码块中使用该对象进行操作。无论try代码块是否抛出异常,Java都会在代码块执行完毕后自动关闭FileInputStream对象。
除了文件输入流,其他类型的流也可以使用try-with-resources语句安全地关闭,包括文件输出流、网络连接、数据库连接等等。只需要确保这些流类实现了AutoCloseable接口。
/**
* 安全关闭流 工具
* @param closeables
*/
try (FileInputStream fis = new FileInputStream("file.txt")) {
// 使用文件输入流进行操作
} catch (IOException e) {
// 异常处理
}
3. 常用流的关闭方式
//使用finally语句块显式关闭流
FileInputStream fis = null;
try {
fis = new FileInputStream("file.txt");
// 使用文件输入流进行操作
} catch (IOException e) {
// 异常处理
} finally {
if (fis != null) {
try {
fis.close();
} catch (IOException e) {
// 异常处理
}
}
}
PS:建议使用第一种和第二种,第一种封装到工具类中,直接调用传入即可,第二种交给jvm自动关闭,安全性大大提高,io流的关闭特别重要,一定要关闭打开的流!