大佬教程收集整理的这篇文章主要介绍了EXcel Sheet POI验证:内存不足错误,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
您有两种选择。选项1-增加JVM Heap的大小,以便Java有更多的可用内存。使用usermodel代码在POI中处理Excel文件是基于DOM的,因此整个文件(包括已解析的表单)需要缓冲到内存中。尝试这样的问题,以获取有关如何增加帮助的建议。
选项#2的工作量更大- 切换到基于事件(SAX)的处理。这一次只处理文件的一部分,因此需要少得多的内存。但是,这需要您做更多的工作,这就是为什么您最好将更多的GB内存扔给这个问题- 内存便宜,而程序员却没有!该电子表格HOWTO页有关于如何做的的.xLSX文件的SAX解析说明,并有通过POI提供的各种示例文件,你可以看看的意见。
。
另外,另一件事- 您似乎正在通过流加载文件,这很糟糕,因为这意味着更多内容需要缓冲到内存中。有关更多信息,请参阅POI文档,包括有关如何直接使用文件的说明。
我正在尝试使用java验证excel文件,然后再将其转储到数据库中。
这是导致错误的代码段。
try {
fis = new FileInputStream(filE);
wb = new XSSFWorkbook(fis);
XSSFSheet sh = wb.getSheet("Sheet1");
for(int i = 0 ; i < 44 ; i++){
XSSFCell a1 = sh.getRow(1).getCell(i);
printXSSFCellType(a1);
}
} catch (FileNotFoundException E) {
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException E) {
// TODO Auto-generated catch block
e.printStackTrace();
}
这是我得到的错误
Exception in thread "main" java.lang.outOfMemoryError: Java heap space
at java.util.ArrayList.<init>(Unknown sourcE)
at java.util.ArrayList.<init>(Unknown sourcE)
at org.apache.xmlbeans.impl.values.NamespaceContext$NamespaceContextStack.<init>(NamespaceContext.java:78)
at org.apache.xmlbeans.impl.values.NamespaceContext$NamespaceContextStack.<init>(NamespaceContext.java:75)
at org.apache.xmlbeans.impl.values.NamespaceContext.getNamespaceContextStack(NamespaceContext.java:98)
at org.apache.xmlbeans.impl.values.NamespaceContext.push(NamespaceContext.java:106)
at org.apache.xmlbeans.impl.values.XmlObjectBase.check_dated(XmlObjectBase.java:1273)
at org.apache.xmlbeans.impl.values.XmlObjectBase.stringvalue(XmlObjectBase.java:1484)
at org.apache.xmlbeans.impl.values.XmlObjectBase.getstringvalue(XmlObjectBase.java:1492)
at org.openxmlformats.scheR_872_11845@as.spreadsheetml.x2006.main.impl.CTCellImpl.getR(Unknown sourcE)
at org.apache.poi.xssf.usermodel.XSSFCell.<init>(XSSFCell.java:105)
at org.apache.poi.xssf.usermodel.XSSFRow.<init>(XSSFRow.java:70)
at org.apache.poi.xssf.usermodel.XSSFSheet.initRows(XSSFSheet.java:179)
at org.apache.poi.xssf.usermodel.XSSFSheet.read(XSSFSheet.java:143)
at org.apache.poi.xssf.usermodel.XSSFSheet.onDocumentRead(XSSFSheet.java:130)
at org.apache.poi.xssf.usermodel.XSSFWorkbook.onDocumentRead(XSSFWorkbook.java:286)
at org.apache.poi.POIXMLDocument.load(POIXMLDocument.java:159)
at org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:207)
at com.xls.validate.ExcelValidator.main(ExcelValidator.java:79)
当xLSX文件小于1 MB时,这可以很好地工作。
我了解这是因为我的xLSX文件约为5-10 MB,POI尝试一次将整个工作表加载到JVM内存中
有什么可能的解决方法?
请帮忙。
提前致谢!
以上是大佬教程为你收集整理的EXcel Sheet POI验证:内存不足错误全部内容,希望文章能够帮你解决EXcel Sheet POI验证:内存不足错误所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。