java 读取 Excel 文件(一行一行读取)
Excel 文件数据量过大,一次读取到内存中会造成资源浪费,严重的会使服务器宕机,所以读取一行处理一行,或者读取一定的行数进行处理,上代码
我用的是阿里的EasyExcel
maven:
com.alibaba easyexcel 2.2.6
使用 EasyExcel 行读取必须继承监听器,生成公共的Listener
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import java.util.ArrayList;
import java.util.List;/*** @version 1.0* @author: lsy* @create: 2021-05-28 11:17**//*** 公共的BaseListener*/
public abstract class BaseListener extends AnalysisEventListener {/*** 每隔3000条存储数据库,实际使用中可以3000条,然后清理list ,方便内存回收*/private static final int BATCH_COUNT = 3000;List list = new ArrayList();public abstract void invoke(T var1, AnalysisContext analysisContext);public abstract void saveData();public abstract void doAfterAllAnalysed(AnalysisContext analysisContext);
}
因为每种 Excel 要写不同的逻辑就直接继承这个公共的,重新读取方法就行
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.exception.ExcelAnalysisException;
import com.kdmins.pojo.User;
import lombok.extern.slf4j.Slf4j;import java.util.ArrayList;
import java.util.List;
import java.util.Map;/*** @version 1.0* @author: lsy* @create: 2021-05-31 09:48**/
@Slf4j //日志框架
public class TestListener extends BaseListener {/*** 每隔100条存储数据库,实际使用中可以3000条,然后清理list ,方便内存回收*/private static final int BATCH_COUNT = 100;//存放数据信息的集合List
实体类:
import lombok.Data;/*** @version 1.0* @author: lsy* @create: 2021-05-31 09:48**/
@Data
public class User {//Excel 表头@ExcelProperty(value = "姓名", index = 0)private String name;//Excel 表头@ExcelProperty(value = "密码", index = 1)private String password;
}
这是我创建的测试Excel

测试main方法:
@Slf4j
public class TestDemo {public static void main(String[] args) {log.info("读取开始");File file = new File("C:\\Excel\\User.xlsx");//todo 此处简单的使用了一下,百度有各种各样的工具类EasyExcel.read(file, User.class, new TestListener()).sheet().doRead();}
}
打印的日志如下:

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
