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

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



导入数据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

时间: 2024-07-31 05:31:17

java easyreport 导入excel、 txt 数据批量读取(五)的相关文章

java easyreport 导入excel、 txt 数据简单实现(一)

一直在看博客,却不知道怎么写,但是总是想写点什么,犹豫了两三天,决定还是写点东西吧,来和大家分享下. 今年上半年时候接到了一个需求,具体什么需求就不说了,要求导入excel数据,并提示每一行错误信息.接到手后,查看之前的导入excel报表的代码,发现只有初始化workBook和根据cell获取cell 字符串值得通用方法.觉得可利用的东西太少了,于是决定就构建一个通用的实现导入excel报表的工具包. 实现思路大致是这样的: 提供模板,模板包含读起始行.属性模板集合.读批次.校验出错中端. 添加

java easyreport 导入excel、 txt 数据txt按字节导入(七)

有时候导入txt文件不一定是采用分隔符方式导入,而是采用按字节.字符长度导入,比如银联对账文件. 导入txt数据 姓名 年龄科目分数 陈寻  12语文67 王老五12语文80 柯景腾13语文78 沈佳宜14语文88 王小贱15语文60 黄小仙12语文54 李大仁14语文76 程又青13语文58 方茴  12语文87 沈晓棠13语文89 林嘉茉14语文68 赵烨  14语文50 苏凯  12语文78 乔燃  13语文90 我们采用iso8859-1单字节编码读取文件数据,一个汉字占2字节. 导入d

java easyreport 导入excel、 txt 数据数据格式校验(六)

在大部分情况下我们需要对导入数据的内容.格式进行合法性验证,验证不通过需要我们提示错误信息. 导入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 我们需要

java easyreport 导入excel、 txt 数据行列索引(四)

姓名 年龄 科目 分数 教师姓名 教师性别 王老五 12 语文 80 张三丰 男 我们要求导入数据中不包含科目和分数. 导入demo TestExcelIndex类 package example; import java.io.File; import java.io.FileInputStream; import java.util.List; import java.util.Map; import model.Student; import test.AbstractExcelTest;

java easyreport 导入excel、 txt 数据关联集合置入对象(三)

接上一节,获取的Student关联的Teacher集合有且只有一个,如何置入多个呢. 自定义StudentMatcher实现MatchAbled方法 package matcher; import java.util.List; import java.util.Map; import model.Student; import com.easyReport.read.MatchAbled; public class StudentMatcher implements MatchAbled<St

java easyreport 导入excel、 txt 数据复合属性(二)

在导入报表的时候,经常会遇到对象属性是集合或数组形似的,如学生会有多个老师,那么这种属性是集合或数组形式的报表如何设置,以及导入呢. Teacher类 package model; public class Teacher { private String name; private String sex; public String getName() { return name; } public void setName(String name) { this.name = name; }

Java版将EXCEL表数据导入到数据库中

1.采用第三方控件JXL实现 try { //实例化一个工作簿对象 Workbook workBook=Workbook.getWorkbook(new File("F://qzlx.xls")); //获取该工作表中的第一个工作表 Sheet sheet=workBook.getSheet(0); //获取该工作表的行数,以供下面循环使用 int rowSize=sheet.getRows(); for(int i=0;i<rowSize;i++) { //编号 String

c#导入excel 绑定数据 repeat为例子

先读取Excel文件并存到dataset 1 public DataSet ExcelToDataTable(string filename, string strsheetname) 2 { 3 try 4 { 5 //源的定义 6 string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + filename + ";" + "Extended Pro

MATLAB中TXT数据文件读取并写入元胞数组的方法与步骤

一. TXT数据文件读取 Data = load('train.txt');   %简单的文件读取,这时在工作区可以看到导入的大数据变量Data 二.大数据变量Data装入元胞数组中 D = cell(5, 1);   %元胞的定义,定义一个5*1的元胞D D{1, 1} = rand(223, 26);   %初始化第1行第1列的元胞为223*26的一个数组,数组元素为随机值 D{1, 1} = Data(1: 1+222, 1: 1+25);  %将大数据变量的223*26的数值赋值(装入)