这是我的代码:
FileOutputStream fos = null;
DataOutputStream dos = null;
try {
fos = new FileOutputStream(file);
dos = new DataOutputStream(fos);
.... writing to file ....
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (dos != null) {
try {
dos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (fos != null) {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
我读到您只需要关闭DataOutpustStream
,它将关闭所有其他流,这是正确的吗?如果我无论如何关闭FileOutputStream
会有什么伤害吗?关闭流的最佳方法是什么?
不,它不会造成任何伤害
您需要按照打开它们的相同顺序关闭它们 - 将它们视为彼此环绕的包装器。如果创建一个FileOutputStream
,然后将其包装在DataOutputStream
中,则应先关闭DataOutputStream
。
但是你应该使用try-with-resources
:
try (
final FileOutputStream fos = new FileOutputStream(file);
final DataOutputStream dos = new DataOutputStream(fos);
) {
....writing to file....
} catch (IOException e) {
e.printStackTrace();
}
如果以相同的方式处理这两个异常,则只能捕获更一般的IOException
。
关闭流的最佳方法是使用 try-resource-blocks 时。在大多数情况以级联方式关闭。对于答案,您必须仔细研究 API。