这是我的代码:
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
会不会造成任何伤害?关闭溪流的最佳方法是什么?
答案 0 :(得分:1)
关闭流的最佳方式是使用try-resource-blocks时。 在大多数情况下,流以级联方式关闭。对于答案,您必须仔细研究API。
答案 1 :(得分:1)
您需要按照打开它们的顺序关闭它们 - 将它们视为彼此包装的包装。如果您创建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
。