优米格
分享有营养的

Apache POI中HSSF,XSSF,SXSSF区别

POI提供了HSSF,XSSF,SXSSF三种方式操作Excel。他们的区别如下:

  • HSSF:是操作Excel97-2003版本,扩展名为.xls
  • XSSF:是操作Excel2007版本开始,扩展名为.xlsx
  • SXSSF:是在XSSF基础上,POI3.8版本开始提供的一种支持低內存占用的操作方式,扩展名为.xlsx

其次,大家需要了解下Excel不同版本的一些区别,這些限制其实间接的局限了POI提供的API功能。

1.支持的行数、列数

  • Excel 97-2003版本,一个sheet最大行數65536,最大列數256;
  • Excel 2007版本开始,一个sheet最大行數1048576,最大列数16384;

2.文件大小

  • .xlsx文件比.xls的压缩率高,也就是相同数据量下,.xlsx的文件会小很多。

3.兼容性

  • Excel 97-2003版本是不能打开.xlsx文件的;
  • Excel 2007开始的版本是可以打开.xls文件的;

根据以上內容,大家可以根据自己的需求進行选择,当然海量数据的导出肯定是推荐SXSSF的方式。编码过程中,其实不同方式的使用方式基本相同,所以互相切换也是比较简单的,只要把带有前缀的接口改成对应的就行了。如:

HSSF对应:HSSFWorkbook、HSSFSheet、HSSFRow、HSSFCell……

XSSF对应:XSSFWorkbook、XSSFSheet、XSSFRow、XSSFCell……

SXSSF对应:SXSSFWorkbook、Sheet、Row、Cell……

  規律還是挺明顯的吧,除了workbook,SXSSF的接口都不帶前綴,另外兩種方式的各個接口都帶有對應的前綴。

  另外,前面有提到SXSSF是一種低內存占用的操作方式,因為其提供了一個新的方法:

SXSSFWorkbook w3= new SXSSFWorkbook(100);//內存中保留100條數據,其余寫入硬盤臨時文件
在數據量超過設置的值時,會在硬盤生成臨時文件保存之前的數據,而且POI會根據規則自動刪除生成的這些臨時文件。

  其實到這裏已經結束了,但在好奇心的驅使下,個人想看看POI生成的臨時文件。所以查了一下,大家說是在系統的緩存文件夾下會產生類似的臨時文件,如:

poi-sxssf-sheet6849116696956134782.xml

根據操作系統的不同,通常目錄如下:

Windows7: C:\Users\xxxx\AppData\Local\Temp (xxxx為windows用戶名)

Linux: /var/tmp/

但並沒有找到,後來在tomcat的臨時文件夾下找到了,如:D:\Tomcat_7.0.42\temp。

於是又科普了一下,發現是tomcat的原因,因為在tomcat上運行的應用會通過java.io.tmpdir系統變量獲取到臨時文件的目錄。

大家可以通過下面的語句查看自己應用的臨時文件目錄:

System.out.println(System.getProperty(“java.io.tmpdir”));
雖然POI會根據規則自動刪除臨時文件,但是知道了文件路徑,大家也可以根據實際情況,看是否刪除這些臨時文件。

转载自:HSSF、XSSF和SXSSF區別以及Excel導出優化

赞(0)
未经允许禁止转载:优米格 » Apache POI中HSSF,XSSF,SXSSF区别

评论 抢沙发

合作&反馈&投稿

商务合作、问题反馈、投稿,欢迎联系

广告合作侵权联系