java - 何时关闭 HSSFWorkbook 构造函数中使用的 InputStream 对象?

标签 java inputstream hssfworkbook

我正在使用 HSSFWorkbook,我想知道应该在哪里关闭构建 HSSFWorkbook 对象时使用的 InputStream 对象。 HSSFWorkbook 是否在其构造函数本身中关闭流?或者我们需要手动关闭它?我们可以在构造函数调用后立即关闭它吗?即,HSSFWorkbook 对象是否仅在其构造函数中使用 InputStream 对象?或者它将来也可以使用它(在这种情况下我们无法关闭它)?谢谢。

public HSSFWorkbook loadSheet(File file) throws FileNotFoundException, IOException {
    return new HSSFWorkbook(new FileInputStream(file)); 
}

最佳答案

HSSFWorkbook 的构造函数没有声明 InputStream 将关闭还是保持打开状态,因此乍一看您不应该假设它会被关闭。然而,深入挖掘,另一方面,在构造函数本身中使用的类的构造函数确实清楚地说明了其行为。

至少在 Apache POI 4.0.0 中,对 new HSSFWorkbook(inputStream) 的调用将导致对 new POIFSFileSystem(inputStream) 的调用,在其实现中,确实似乎总是关闭流,并且构造函数文档也证实了这一点。

这似乎指向您问题的以下答案:

  • HSSFWorkbook 是否会在其构造函数本身中关闭流?是的,间接的。
  • 或者我们需要手动关闭它吗?显然不是,除非他们决定不再依赖 POIFSFileSystem,这似乎不太可能。
  • 我们可以在构造函数调用后立即关闭它吗?显然,是的...但没有必要。
  • HSSFWorkbook 对象是否仅在其构造函数中使用 InputStream 对象?显然是这样。

关于java - 何时关闭 HSSFWorkbook 构造函数中使用的 InputStream 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60224963/

相关文章:

java - 从表模型中删除行后恢复 jTable 焦点和位置

java - 将单个 HSSFCellStyle 复制到 HSSFWorkbook 的多个单元格

java - 连字符转换为菱形黑色问号,同时使用apache POI设置Excel列标题

Java,Telnet,检查输入流中的字符串

java - 这是 ASCII 类型吗?

java - 有没有办法判断输入流是否在代码中的任何位置打开和未关闭

android apache poi 错误

java - org.springframework.beans.factory.BeanCreationException 与事务管理器

java - 将参数传递给struts2中的url?

java - 通过 HttpClient 接受所有 Cookie