有时候我们需要读的报表数据很大,这时候一次加载所有数据有可能会出现内存溢出,所以我们需要采用批量读取来实现。
导入数据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
注:很不好意思上传附件的时候把字节码打包上传了,请到第六章节下载!