我正在使用 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/