我想使用Apache POI中的Streaming Usermodel API(即SXSSF)。但我不喜欢它使用临时文件的方式。
问题: 在Apache POI中,是否有可能直接将数据刷新到输出流中而无需使用临时文件?
问题: 在Apache POI中,是否有可能直接将数据刷新到输出流中而无需使用临时文件?
.xlsx
文件,需要各部分内容相互匹配。这些引用、链接和id等在写出文件时需要由Apache POI进行更新。因此你有两个选择:XSSF - 没有临时文件,易于操作,所有内容保留在内存中;SXSSF - 有各种限制,大部分内容被划分到临时文件中,只有少量内容保留在内存中。如果你不想使用临时文件,请购买更多的内存并使用XSSF!此外,请注意您可以控制POI放置临时文件的位置,如果默认设置对您不起作用。是的,我们可以在生成Excel文件时停止临时文件的生成。您可以将临时文件压缩或处理掉。但是建议使用处理方法,因为如果调用处理方法,文件将不会再次创建。
代码片段
SXSSFWorkbook wb = new
SXSSFWorkbook(100);
// write your code.
wb.dispose();
// This method will help to stop the temp file generation.
您也可以压缩文件
wb.setCompressTempFiles(true);
它将创建一个临时文件的压缩包。但是推荐使用dispose。
POI 5.2.+有DeferredSXSSFWorkbook,使用更少的临时文件。请参见https://svn.apache.org/repos/asf/poi/trunk/poi-examples/src/main/java/org/apache/poi/examples/xssf/streaming/DeferredGeneration.java