本文在 CSDN 同步更新
我们在项目中处理文件时,总会有很多的io流需要关闭,而关闭流的代码写起来比较繁琐,比如下面这种写法
/**
* 打印文件内容到控制台
* @param filePath
*/
public static void commonTryCatch(String filePath){
FileInputStream fis = null;
InputStreamReader isr = null;
BufferedReader br = null;
try{
fis = new FileInputStream(filePath);
isr = new InputStreamReader(fis,"GBK");
br = new BufferedReader(isr);
String line = "";
while((line = br.readLine()) != null){
System.out.println(line);
}
}catch(Exception e){
// to do 记录日志,方便定位
throw new RuntimeException("读取文件失败");//抛出封装过的自定义业务异常
}finally{
try{
if(fis != null){
fis.close();
}
}catch(Exception e){
// to do 记录日志,方便定位
}
try{
if(isr != null){
isr.close();
}
}catch(Exception e){
// to do 记录日志,方便定位
}
try{
if(br != null){
br.close();
}
}catch(Exception e){
// to do 记录日志,方便定位
}
}
}
事实上,在java 7 之前这种写法是最标准的写法:
java 7优化后的写法**
在java 7 中,java给了一种非常简洁的写法;
/**
* 打印文件内容到控制台
* @param filePath
*/
public static void tryWithResources(String filePath){
try(FileInputStream fis = new FileInputStream(filePath);
InputStreamReader isr = new InputStreamReader(fis,"GBK");
BufferedReader br = new BufferedReader(isr);){
String line = "";
while((line = br.readLine()) != null){
System.out.println(line);
}
}catch(Exception e){
// to do 记录日志,方便定位
throw new RuntimeException("读取文件失败");//抛出封装过的自定义业务异常
}
}
try(Resource res = ...){
work with res
}
try块退出时,会自动调用res.close()
大家可以看下corejava书中的描述
尽管这个特性在java 7 就出现了,但我发现身边的同事用得很少,可能是java 7这个新特性比较低调吧,不过我可 不允许这么香的特性被丢在角落里! 所以有了这篇文章。
用过这个特性后的我只能说:“真香!”
所以,以后关闭资源尽可能使用 try-with-Resources 的方式,代码简洁明了,一点也不拖泥带水。
欢迎关注我的微信公众号: 一辈子的码农先生 ,接下来会有非常多的干货总结,既为沉淀自己,也为帮助他人,感谢关注!
Previous
java项目没有main函数也能输出“HelloWorld”?