Apache POI: 是否可以在不使用临时文件的情况下使用SXSSF?

5
我想使用Apache POI中的Streaming Usermodel API(即SXSSF)。但我不喜欢它使用临时文件的方式。
问题: 在Apache POI中,是否有可能直接将数据刷新到输出流中而无需使用临时文件?

你想要解决什么问题? - Axel
@Axel:我需要创建一个下载servlet,以便能够下载非常大的Excel文件。理想情况下,由于各种原因(安全性、磁盘空间、集群等),下载servlet不应该需要存储任何临时文件。 - MRalwasser
@MRalwasser,您可以通过调用SXSSFWorkbook.dispose()来删除临时文件。 - Sedat Polat
4个回答

4
为了生成有效的Excel .xlsx文件,需要各部分内容相互匹配。这些引用、链接和id等在写出文件时需要由Apache POI进行更新。因此你有两个选择:XSSF - 没有临时文件,易于操作,所有内容保留在内存中;SXSSF - 有各种限制,大部分内容被划分到临时文件中,只有少量内容保留在内存中。如果你不想使用临时文件,请购买更多的内存并使用XSSF!此外,请注意您可以控制POI放置临时文件的位置,如果默认设置对您不起作用。

1

是的,我们可以在生成Excel文件时停止临时文件的生成。您可以将临时文件压缩或处理掉。但是建议使用处理方法,因为如果调用处理方法,文件将不会再次创建。

代码片段

SXSSFWorkbook wb = new 
SXSSFWorkbook(100);

// write your code.

wb.dispose();  
// This method will help to stop the temp file generation.

0

您也可以压缩文件

wb.setCompressTempFiles(true);

它将创建一个临时文件的压缩包。但是推荐使用dispose。


0

“较少的临时文件”并不意味着“没有临时文件”。顺便提一下,DeferredSXSSFWorkbook仍然有些“实验性质”-请参见https://www.mail-archive.com/dev@poi.apache.org/msg34019.html 编辑:刚刚意识到您是我所提到的消息的作者-因此您已经知道这一点 ;) - MRalwasser

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接