gpt4 book ai didi

java - 强制只读 Apache POI 中的第一张表

转载 作者:行者123 更新时间:2023-12-01 20:52:37 27 4
gpt4 key购买 nike

我使用 Apache POI 仅读取 Excel 文件第一张表中的数据。提交的 xlsx 文件通常只有 1 张,大约 2.5MB(数据行数略多于 13 万行),一切进展缓慢但顺利,没有错误。但是,如果提交的 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代替https://github.com/monitorjbl/excel-streaming-reader

 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);

关于java - 强制只读 Apache POI 中的第一张表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42993196/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com