解决java中poi读取excel大文件内存溢出的问题

引入依赖

		<dependency>
			<groupId>com.monitorjbl</groupId>
			<artifactId>xlsx-streamer</artifactId>
			<version>1.2.0</version>
		</dependency>

解决方案

		//path为文件路径     获取文件
        InputStream stream = new FileInputStream(new File(path));
        // 将输入流转换为工作簿对象
        Workbook wb = StreamingReader.builder()
                .rowCacheSize(100)//读取到内存中的行数,默认10
                .bufferSize(4096)//读取资源,缓存到内存的字节大小。默认1024
                .open(stream);//打开资源。只能是xlsx文件
        //获取第一个sheet
        Sheet rows = wb.getSheetAt(0);
        try {
        	//遍历行
            for (Row row : rows) {
           	 System.out.println("开始遍历第" + row.getRowNum() + "行数据:");
           	 //i可代表哪一列
                int i = 0;
                try {
                	//遍历列
                    for (Cell cell : row) {
                        i++;
                        //读取第五行第二列单元格数据
                        if (row.getRowNum() == 5) {
                            if (i == 2) {
                           		System.out.println(cell.getStringCellValue());
                            }
                        }
                        //根据某一行第二列单元格中值读取本行第四列单元格的值 
                        if (i == 2 && cell.getStringCellValue().equals("小计")) {
                           System.out.println(row.getCell(3).getStringCellValue());
                        }
                    }
                } catch (Exception e) {
                    logger.error("excel文件解析失败");
                }
            }
        } catch (Exception e) {
            logger.error("excel文件解析失败");
        }
        //关闭stream
        stream.close();

转载请附上原文出处链接和本声明。

  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java读取Excel文件时,有可能会遇到内存溢出问题。导致内存溢出的原因主要有以下几个方面: 1. Excel文件过大:如果Excel文件非常大,包含大量的数据和工作表,读取整个文件可能会消耗大量的内存。尤其是使用HSSF或XSSF类库来处理大型Excel文件时,会将整个Excel文件加载到内存,容易导致内存溢出。 2. 数据处理不当:在读取Excel文件时,如果没有合理的处理数据,比如对读取的每一行进行逐行处理,将数据存储到合适的数据结构,可能会导致大量数据同时存在内存,从而引发内存溢出。 3. 不适当地使用对象:在读取Excel时,可能需要使用大量的对象来存储表格、工作表、单元格等信息。如果使用不当,比如没有及时释放对象,或者创建了过多的对象,都会增加内存的占用,并有可能导致内存溢出。 为解决内存溢出问题,可以采取以下措施: 1. 分块读取:可以将Excel文件按照一定的规则进行分块读取,每次只读取一部分数据,处理完后释放内存。这样可以降低内存占用,减少内存溢出的风险。 2. 使用流式处理:可以使用Apache POI提供的SXSSFWorkbook类库,通过流式处理方式来读取大型Excel文件。它将Excel文件划分为多个窗格,并在内存保持一定数量的数据,可以有效地降低内存占用。 3. 及时释放资源:在读取Excel文件时,要注意及时释放不再使用的对象和资源,比如关闭工作表、关闭输入流等。这样可以避免内存泄漏和过度占用内存的情况。 综上所述,Java读取Excel文件内存溢出问题可以通过合理分块读取、流式处理和及时释放资源等方式来解决。需要根据具体的情况选择合适的处理方法,以确保程序在读取Excel文件时不会发生内存溢出

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值