读取大数据量Excel文件——POI的事件驱动模式

目录

1 适用场景

2 实现方式

3 导入依赖

4 代码

4.1 核心的解析处理器

4.2 在业务层调用sax解析处理器

4.3 导入excel的入口

5 程序运行结果


1 适用场景

       使用POI读取Excel文件有两种方式,一种是用户模式,使用封装好的API操作Excel文件,这也是常用的一种方式。在用户模式下读取Excel文件数据会一次性将文件中的内容写入内存,虽使用方便,但是当文件数据够大时,比如大于5W条数据,就可能出现内存溢出。这种情况下可以用POI的事件驱动,基于Sax的读取方式读取Excel文件。

2 实现方式

       POI的事件驱动,是区别于用户模式的另一种解析方式,原理是逐行读取Excel文件(仅限于Excel2007以上版本),也就是在读取完一行数据后,POI不会将数据写入内存,然后接着读取下一行,而我们可以获取到读取的每一行数据,将每一行数据的信息封装成对象后再做我们需要的操作。

        例如有这样一个需求,导入一个100W数据量的Excel,读取其中的内容,并写入数据库中。我们就可以通过这种逐行读取的方式将读取的每一行都封装成对象后写入List集合中,当集合数据量达到1024或者其他数量值时(根据数据库情况调整),将List集合中的数据写入数据库并清空这一个集合继续读取/写入的操作。当然,Excel中的数据量不一定就是1024的整数,所以还要对最后剩下的数据作单独的插入。

3 导入依赖

        Maven的相关依赖如下:

        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>4.0.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>4.0.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml-schemas</artifactId>
            <version>4.0.1</version>
        </dependency>

4 代码

4.1 核心的解析处理器

        这里实现了POI提供的接口,重写的方法就是对每一行数据的处理。我在这里是将每一行的数据封装成了一个Employee对象,并写入一个List集合中,当List的大小达到1024时,执行插入,当然我这里没有连接数据库,使用打印控制台代替。另外,定义了成员变量,提供get()方法,使其可以在调用解析处理器的代码处获取想要的数据,包括因为数据不是1024的倍数而剩下的需要插入数据的List集合

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值