java批量导出txt,java easyreport 导入excel、 txt 数据批量读取(五)

本文探讨了如何在处理大型Excel报表时避免内存溢出,通过Java实现批量读取功能。作者展示了如何使用`TestExcelBatch`类,配置`ReadTemp`以分批读取,以及如何处理`Student`对象列表和Map数据。实例演示了如何使用`ConvertReader`和`ModelClass`读取和处理数据,适用于大数据分析和报表处理场景。
摘要由CSDN通过智能技术生成

有时候我们需要读的报表数据很大,这时候一次加载所有数据有可能会出现内存溢出,所以我们需要采用批量读取来实现。

导入数据test5.xls姓名年龄科目分数

王老五12语文80

柯景腾13语文78

沈佳宜14语文88

王小贱15语文60

黄小仙12语文54

李大仁14语文76

程又青13语文58

陈寻12语文67

方茴12语文87

沈晓棠13语文89

林嘉茉14语文68

赵烨14语文50

苏凯12语文78

乔燃13语文90

导入测试demo

package example;

import java.io.File;

import java.io.FileInputStream;

import java.util.List;

import java.util.Map;

import model.Student;

import test.AbstractExcelTest;

import com.easyReport.read.temp.PropertyTemp;

import com.easyReport.read.temp.ReadTemp;

public class TestExcelBatch extends AbstractExcelTest {

@Override

public void test() {

FileInputStream fileInputStream;

try {

fileInputStream = new FileInputStream(new File("testFile/test5.xls"));

testReadBean(fileInputStream);

//testReadMap(fileInputStream);

fileInputStream.close();

} catch (Exception e) {

e.printStackTrace();

}

}

@Override

protected ReadTemp bulidReadTemp() {

//模板设置批次构造方法,一次读取10行

ReadTemp readTemp = new ReadTemp(1,10);

readTemp.addPropertyTemp(new PropertyTemp("姓名", "name"));

readTemp.addPropertyTemp(new PropertyTemp("年龄", "age"));

readTemp.addPropertyTemp(new PropertyTemp("科目", "course.name"));

readTemp.addPropertyTemp(new PropertyTemp("分数", "course.score"));

return readTemp;

}

@Override

protected void writeBeanList(List modelLists) {

System.out.println("--------------bean---------------");

for (Student s : modelLists) {

System.out.println(s.getName() + "|"

+ s.getAge()+s.getCourse().getName()+"|"+s.getCourse().getScore());

}

}

@Override

protected void writeMapList(List> mapLists) {

System.out.println("--------------map---------------");

for (Map m : mapLists) {

System.out.println(m.get("name") + "|" + m.get("age")+"|" + m.get("course.name")+"|" + m.get("course.score"));

}

}

}

基类basicTest

public void testReadBean(FileInputStream fis) throws Exception {

ConvertReader reader = buildReader();

//判断是否批次读取,若批次读取,写每批次数据

if(reader.getContext().getTemp().getBatch() == 0){

writeBeanList((List) reader.readToBeanList(fis, getModelClass()));

}else{

//判断是否批次读取完成

while(!reader.isEnd()){

writeBeanList((List) reader.readToBeanList(fis, getModelClass()));

}

}

}

public void testReadMap(FileInputStream fis) throws Exception {

ConvertReader reader = buildReader();

writeMapList(reader.readToMapList(fis));

if(reader.getContext().getTemp().getBatch() == 0){

writeMapList(reader.readToMapList(fis));

}else{

while(!reader.isEnd()){

writeMapList(reader.readToMapList(fis));

}

}

}

执行demo测试类,运行结果:

--------------bean---------------

王老五|12语文|80.0

柯景腾|13语文|78.0

沈佳宜|14语文|88.0

王小贱|15语文|60.0

黄小仙|12语文|54.0

李大仁|14语文|76.0

程又青|13语文|58.0

陈寻|12语文|67.0

方茴|12语文|87.0

沈晓棠|13语文|89.0

--------------bean---------------

林嘉茉|14语文|68.0

赵烨|14语文|50.0

苏凯|12语文|78.0

乔燃|13语文|90.0

注:很不好意思上传附件的时候把字节码打包上传了,请到第六章节下载!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值