[英]try-with-resources or close() dilemma
我有一个可以引发IOException的函数,所以我没有在内部捕获异常。 但是我有一些资源要关闭。 以这种方式使用try-with-resource(没有任何catch块)是否正确:
public void workOnFiles() throws IOException {
try(FileInputStream fis = new FileInputStream("bau.txt");) {
// Do some stuff
}
}
或者我应该做类似的事情:
public void workOnFiles() throws IOException {
FileInputStream fis = new FileInputStream("bau.txt");
// Do some stuff
fis.close();
}
在第二个中,如果引发异常,则不会关闭您的fis
。 一种选择是将可能引发异常的语句包含在try
块中,并将fis
封闭在finally
块中。
但是,由于您已经在使用Java 7 ,因此应该使用try-with-resource 。
try-with-resources总是关闭(Closeable resources)
资源,无论是否引发异常(Work only java7 onwards)
。
如果出现异常,则第二条代码不会关闭资源。
因此,如果您使用的是java7
则可以使用try-with-resources
,也可以使用try
和finally
块编辑代码。
finally block guarantees execution irrespective of exception raises or not
如果您热衷于使用第二种方法,请在finally
块中关闭资源。
public void workOnFiles() throws IOException {
FileInputStream fis = null;
try {
fis = new FileInputStream("bau.txt");
// Do some stuff
}
finally {
try {
fis.close();
}
catch(Exception e) {
//logger.error(e);
// e.printStackTrace();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.