java.lang.OutOfMemoryError:使用Apache POI读取excel时的Java堆空间

16 java apache-poi

我的文件是9MB,我在加载工作簿时遇到此错误.

XSSFWorkbook workbook = new XSSFWorkbook(excelFilePath); 
Run Code Online (Sandbox Code Playgroud)

这条线导致 java.lang.OutOfMemoryError: Java heap space

我怎么解决这个问题?

Ran*_*ess 25

首先要检查的是 - 您是使用InputStream还是文件打开XSSFWorkbook?用文件打开它的内存要低得多.

接下来,你想读或写吗?如果你的内存非常紧张,那么在sax中使用XSSF还有其他选择.

有关阅读的信息,请参阅http://poi.apache.org/spreadsheet/how-to.html#xssf_sax_api,了解有关使用XSSF + Sax的详细信息.作为另一种选择,如果您只想获取文件的文本内容,那么看起来Apache Tika使用POI为.xlsx文件提供了基于事件的文本提取器.

对于写作,最近关于改进"大网格演示"的POI开发列表已经有很多讨论.您可能想要关注那些 - http://poi.apache.org/mailinglists.html

  • 不要使用字符串,直接使用File对象 - 有关如何操作的详细信息,请参阅[POI快速入门指南](http://poi.apache.org/spreadsheet/quick-guide.html#FileInputStream) (2认同)

Joe*_*oel 9

我认为默认堆大小是128M

您可以使用java-Xmx参数来增加它

例如

java -Xmx512m myapp.java
Run Code Online (Sandbox Code Playgroud)