Java 在Apache POI中强制只读第一页

Java 在Apache POI中强制只读第一页,java,excel,apache,apache-poi,Java,Excel,Apache,Apache Poi,我使用ApachePOI只读取excel文件第一页中的数据。提交的xlsx文件通常只有1页,大约为2.5MB(数据行略多于130k行),并且一切都进展缓慢但顺利,没有错误。但是,如果提交的xlsx包含多个工作表,并且其他工作表中也包含大量数据,则执行会抛出OutOfMemoryError:Java堆空间错误。现在,我试图弄清楚是否可以始终只读取第一页上的数据,而不必担心内存错误(我使用-Xmx1024m-Xms512m参数运行此程序) 编辑:这是我的代码 InputStream inputStr

我使用ApachePOI只读取excel文件第一页中的数据。提交的xlsx文件通常只有1页,大约为2.5MB(数据行略多于130k行),并且一切都进展缓慢但顺利,没有错误。但是,如果提交的xlsx包含多个工作表,并且其他工作表中也包含大量数据,则执行会抛出OutOfMemoryError:Java堆空间错误。现在,我试图弄清楚是否可以始终只读取第一页上的数据,而不必担心内存错误(我使用-Xmx1024m-Xms512m参数运行此程序)

编辑:这是我的代码

InputStream inputStream = new FileInputStream(new File(excelfile));
XSSFWorkbook workbook = new XSSFWorkbook(inputStream);

    if (workbook.getNumberOfSheets() != 1) {
      throw new Exception("Make sure excel only has 1 sheet");
    }

程序在第二行抛出错误(如果excel文件在第二页上也有大量数据)

Apache POI通常会引发许多与内存相关的问题,我强烈建议改用monitorjbs


ApachePOI通常会引发许多与内存相关的问题,我强烈建议改用monitorjbs


如果我不必改变内存限制,那将是理想的。如果我不必改变内存限制,那将是理想的。我将在明天试一试!谢谢我明天会试一试的!谢谢
 InputStream is = new FileInputStream(new File(filePath));
                Workbook workbook = StreamingReader.builder()
                        .rowCacheSize(100) // number of rows to keep in memory (defaults to 10)
                        .bufferSize(2048) // buffer size to use when reading InputStream to file (defaults to 1024)
                        .open(is)) {

            Sheet sheet = workbook.getSheetAt(0);