Java IOUtils方法中流的自动关闭

Java IOUtils方法中流的自动关闭,java,stream,apache-commons,apache-commons-io,Java,Stream,Apache Commons,Apache Commons Io,Apache库几乎是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(); 当前工作流: I

Apache库几乎是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();
当前工作流:

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

我能一行完成吗?我有什么选择?如果什么都没有,为什么?

有几个原因:

  • 其他一些工作流仍然有对该流的引用,并且可能希望在不久的将来写入该流。
    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();
}

java.nio.file.Files
使很多这类文件过时了
Files.write(path.get(…),myBytes)
@JonSkeet哇,太好了,我看到writeLines方法是在1.8中引入的,所以功能几乎相同。你不介意写一个答案吗?好吧,它似乎没有真正回答你提出的问题,甚至让这个问题变得多余:)@JonSkeet好吧,至少我有一行,tx)我完全理解原因,我的问题是是否有其他方法,如果没有,为什么。Jon Skeet给出了一个很好的核心java解决方案,“我完全理解原因”和“如果没有原因的话-为什么”是相互矛盾的。不在IOUtils中引入方法writeAndClose的原因是什么?类似于“为什么不在包Y中引入方法X”的问题毫无意义,因为我们都不是包的开发团队的一部分。为了完整起见,你的问题的答案是我答案中的第二点。