程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了EXcel Sheet POI验证:内存不足错误大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决EXcel Sheet POI验证:内存不足错误?

开发过程中遇到EXcel Sheet POI验证:内存不足错误的问题如何解决?下面主要结合日常开发的经验,给出你关于EXcel Sheet POI验证:内存不足错误的解决方法建议,希望对你解决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,请注明来意。