有时候我们需要读的报表数据很大,这时候一次加载所有数据有可能会出现内存溢出,所以我们需要采用批量读取来实现。
导入数据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<Student> {
@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<Student> 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<Map<String, Object>> mapLists) {
System.out.println("--------------map---------------");
for (Map<String, Object> 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<T>) reader.readToBeanList(fis, getModelClass()));
}else{
//判断是否批次读取完成
while(!reader.isEnd()){
writeBeanList((List<T>) 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
本文出自 “菜鸟博博” 博客,请务必保留此出处http://zhangxiao2.blog.51cto.com/6342789/1588241
java easyreport 导入excel、 txt 数据批量读取(五)
原文地址:http://zhangxiao2.blog.51cto.com/6342789/1588241