在单个最后块中执行多个文件关闭是一件坏事吗?
有关摘录:
BufferedInputStream inStream;
BufferedOutputStream destStream;
try {
inStream = new BufferedInputStream(/*...*/);
destStream = new BufferedOutputStream(/*...*/);
// ... reading from file
// ... processing
// ... writting to file
destStream.flush();
} catch (Exception e) {
Log("ERROR: " + e.getMessage());
} finally {
try { destStream.close(); } catch (Exception ignored) {}
try { inStream.close(); } catch (Exception ignored) {}
}编辑-1:我不能使用java7 (所以我不能使用来自java7的try-with ) :(
发布于 2017-03-09 08:01:58
正如Nolequen所写的,他的选择更适合使用。但这是7+中才有可能只有在
如果您想继续执行您的解决方案,您可以创建一个尝试并将其放入内部。
try {
BufferedInputStream inStream = new BufferedInputStream(/*...*/);
BufferedOutputStream destStream = new BufferedOutputStream(/*...*/);
// ... reading from file
// ... processing
// ... writting to file
destStream.flush();
} catch (Exception e) {
Log("ERROR: " + e.getMessage());
} finally {
try {
destStream.close();
inStream.close();
} catch (Exception ignored) {}
}发布于 2017-03-09 07:53:59
最好使用试着用资源语句。因此,您不需要手动关闭流:
try (final BufferedInputStream inStream = new BufferedInputStream(/*...*/);
final BufferedOutputStream destStream = new BufferedOutputStream(/*...*/)) {
//do some work
} catch (Exception e) {
Log("ERROR: " + e.getMessage());
}发布于 2017-03-09 09:29:19
InputStream和OutputStream都在Java6中实现了Closable接口,这样您就可以编写自己的异常,以规范更接近的对象/方法:
private void closeIgnoringException(Closable closable){
try { closable.close(); }
catch (Exception ignored) {
ignored.printStacktrace();
}
}
Set<Closable> closables = new HasSet<Closable>();
try {
BufferedInputStream inStream = new BufferedInputStream(/*...*/);
closables.add(inStream);
BufferedOutputStream destStream = new BufferedOutputStream(/*...*/);
closables.add(destStream );
// ... reading from file
// ... processing
// ... writting to file
destStream.flush();
} catch (Exception e) {
Log("ERROR: " + e.getMessage());
} finally {
for(Closable closable : closables)
closeIgnoringException(closable );
}https://codereview.stackexchange.com/questions/157301
复制相似问题