以下是要创建try(SXSSFWorkbook wb = new SXSSFWorkbook()) {
//...
} finally {
wb.dispose(); //wb not accessible over here, so can't use try with resource
}
的示例代码段:
dispose()
这里的问题是,如果我使用try with resource,那么最后可以SXSSFWorkbook
wb
,因为变量SXSSFWorkbook
在finally块中无法访问。
我想知道处理删除临时文件所需的工作簿,或者因为AutoCloseable
是class ProductExtended {
/** @var Product **/
private $product;
/** @var float **/
private $originalPrice;
/** @var float **/
private $discountedPrice;
...
,尝试使用资源会处理它。
答案 0 :(得分:3)
不确定apache poi
程序员是否有人会回复此问题。但apache poi
是开源的。因此,每个程序员都可以通过查看代码来回答这个问题。
状态2018年5月,apache poi
版本3.17
。
public class SXSSFWorkbook implements Workbook
那么为什么这可以成为使用资源尝试的资源?因为
public interface Workbook extends Closeable, Iterable<Sheet>
因此org.apache.poi.ss.usermodel.Workbook
扩展java.io.Closeable
,因此实现此目的的类必须提供方法close
。
如您所见,单个SheetDataWriter
将会关闭,然后内部XSSFWorkbook _wb
将会关闭。
SheetDataWriter.close
仅刷新并关闭Writer _out
。
所以不,在dispose
版本apache poi
3.17
只有SheetDataWriter.dispose会删除为每张工作表创建的TempFile _fd
。
答案 1 :(得分:0)
这是问题的解决方案。
SXSSFWorkbook t_wb = null;
try(SXSSFWorkbook wb = t_wb = new SXSSFWorkbook()) {
//...
} finally {
if(t_wb != null) t_wb.dispose();
}