在IOUtils方法中自动关闭流

时间:2016-03-11 13:25:01

标签: java stream apache-commons apache-commons-io

Apache commons-io库几乎是java中IO操作的事实上的方式。真正困扰我的是它没有提供在io操作后自动流关闭的方法。

所需的工作流程:

IOUtils.write(myBytes, new FileOutputStream("/path/to/file.txt"));

当前工作流程:

FileOutputStream fos = new FileOutputStream("/path/to/file.txt")
IOUtils.write(myBytes, fos);
fos.close();

我可以在一行中完成吗?我有什么替代品?如果什么都没有,为什么?

1 个答案:

答案 0 :(得分:0)

有几个原因:

  • 其他一些工作流程仍然引用该流,并且可能希望在不久的将来写入该流。 IOUtils无法知道此信息。以这种方式关闭流可能会很快产生不良行为。

  • IO操作应该是原子的。 write()写入流,close()将其关闭。 没有理由同时执行这两项操作,特别是如果方法的名称明确说明write(),而不是writeAndClose()

编写自己的writeAndClose()函数。

public static void writeAndClose(String path, Byte[] bytes)
{
    FileOutputStream fos = new FileOutputStream(path)
    IOUtils.write(bytes, fos);
    fos.close();
}