【问题标题】:Do I need to close FileOutputStream object?我需要关闭 FileOutputStream 对象吗?
【发布时间】:2018-07-24 14:42:52
【问题描述】:

在我的代码中,我使用的是 Apache POI 库类 - HSSFWorkbook

try {
    testBook.write(outputStream);
} catch (Exception e) {
    throw new ExportException(e);
}

如您所见,我将FileOutputStream 对象传递给write() 方法。 我的问题是,是否需要在 finally 块或 POI 内部关闭此流对象?

我看到POIFSFileSystem.writeFilesystem() 方法是从HSSFWorkbook.write() 方法和writeFilesystem() 中调用的 方法后面的代码是在流对象被传递给writeBlocks() 方法的地方编写的。但我不确定在运行时 writer 变量将引用哪个类的哪个实例。所以我最后不知道那个流对象发生了什么。

请帮忙。

iter = writers.iterator();
while (iter.hasNext())
{
    BlockWritable writer = ( BlockWritable ) iter.next();

    writer.writeBlocks(stream);
}

【问题讨论】:

  • 把它包在try-with-resources 块中,不用担心。
  • 还请查阅 javadocs - 这就是它们的用途
  • @RobbyCornelissen outputStream 作为方法参数传递。所以我不能在try-with-resources staement 声明它
  • 你在某处声明它,不是吗?
  • 我已经声明了那个操作系统变量并将它传递给一个方法。我已经提到了该方法的主体

标签: java apache-poi fileoutputstream


【解决方案1】:

The Javadoc for the method 没有提到关闭流,所以你有责任在必要时关闭它。注意其实the implementation does not close the stream;从理论上讲,这可以促进诸如实现序列化表单之类的事情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-26
    • 2013-01-10
    • 1970-01-01
    • 2014-10-08
    • 2010-10-19
    • 2021-02-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多