关闭Java输入/输出流

时间:2015-04-13 07:04:35

标签: java file input stream output

这是我的代码:

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会不会造成任何伤害?关闭溪流的最佳方法是什么?

2 个答案:

答案 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