首页 > 代码库 > java easyreport 导入excel、 txt 数据txt按字节导入(七)

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字节。


导入demo

package example;


import java.io.File;

import java.io.FileInputStream;

import java.util.List;

import java.util.Map;


import model.Student;

import test.AbstractTxtTest;


import com.easyReport.read.checker.GEValuePropertyChecker;

import com.easyReport.read.checker.LEValuePropertyChecker;

import com.easyReport.read.checker.PropertyChecker;

import com.easyReport.read.temp.ReadTemp;

import com.easyReport.read.temp.TxtBytePropertyTemp;

import com.easyReport.read.temp.TxtReadTemp;


public class TestTxtByte extends AbstractTxtTest<Student> {

@Override

public void test() {

FileInputStream fileInputStream;

try {

fileInputStream = new FileInputStream(new File("testFile/test7.txt"));

testReadBean(fileInputStream);

// testReadMap(fileInputStream);

fileInputStream.close();

} catch (Exception e) {

e.printStackTrace();

}

}


@Override

protected ReadTemp bulidReadTemp() {

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

TxtReadTemp readTemp = new TxtReadTemp(1,10);

readTemp.setEncode("iso8859-1");

readTemp.addPropertyTemp(new TxtBytePropertyTemp("姓名", "name",0,6));

readTemp.addPropertyTemp(new TxtBytePropertyTemp("年龄", "age",6,8));

readTemp.addPropertyTemp(new TxtBytePropertyTemp("科目", "course.name",8,12));

//大于等于60小于等于80

readTemp.addPropertyTemp(new TxtBytePropertyTemp("分数", "course.score",new PropertyChecker[]{

new GEValuePropertyChecker(60),new LEValuePropertyChecker(80)

},12,14));

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"));

}

}


}

导入模板见红色字体部分,我们设置编码为iso8859-1,读取文件将按照设置编码输入流读取,同事使用TxtBytePropertyTemp属性模板设置读起始位置等。

运行结果:

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

陈寻|12语文|67.0

王老五|12语文|80.0

柯景腾|13语文|78.0

王小贱|15语文|60.0

李大仁|14语文|76.0

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

林嘉茉|14语文|68.0

苏凯|12语文|78.0

第5行,分数值必须小于等于80.0;

第7行,分数值必须大于等于60.0;

第9行,分数值必须大于等于60.0;

第10行,分数值必须小于等于80.0;

第11行,分数值必须小于等于80.0;

第13行,分数值必须大于等于60.0;

第15行,分数值必须小于等于80.0;


我们也可以采用按字符长度读取文件。

导入数据我们做修改,姓名使用3字符长度。

姓名 年龄科目分数

陈寻 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


导入demo

package example;


import java.io.File;

import java.io.FileInputStream;

import java.util.List;

import java.util.Map;


import model.Student;

import test.AbstractTxtTest;


import com.easyReport.read.checker.GEValuePropertyChecker;

import com.easyReport.read.checker.LEValuePropertyChecker;

import com.easyReport.read.checker.PropertyChecker;

import com.easyReport.read.temp.ReadTemp;

import com.easyReport.read.temp.TxtBytePropertyTemp;

import com.easyReport.read.temp.TxtReadTemp;


public class TestTxtByte extends AbstractTxtTest<Student> {

@Override

public void test() {

FileInputStream fileInputStream;

try {

fileInputStream = new FileInputStream(new File("testFile/test7.txt"));

testReadBean(fileInputStream);

// testReadMap(fileInputStream);

fileInputStream.close();

} catch (Exception e) {

e.printStackTrace();

}

}


@Override

protected ReadTemp bulidReadTemp() {

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

TxtReadTemp readTemp = new TxtReadTemp(1,10);

/* readTemp.setEncode("iso8859-1");

readTemp.addPropertyTemp(new TxtBytePropertyTemp("姓名", "name",0,6));

readTemp.addPropertyTemp(new TxtBytePropertyTemp("年龄", "age",6,8));

readTemp.addPropertyTemp(new TxtBytePropertyTemp("科目", "course.name",8,12));

//大于等于60小于等于80

readTemp.addPropertyTemp(new TxtBytePropertyTemp("分数", "course.score",new PropertyChecker[]{

new GEValuePropertyChecker(60),new LEValuePropertyChecker(80)

},12,14));*/

readTemp.addPropertyTemp(new TxtBytePropertyTemp("姓名", "name",0,3));

readTemp.addPropertyTemp(new TxtBytePropertyTemp("年龄", "age",3,5));

readTemp.addPropertyTemp(new TxtBytePropertyTemp("科目", "course.name",5,7));

//大于等于60小于等于80

readTemp.addPropertyTemp(new TxtBytePropertyTemp("分数", "course.score",new PropertyChecker[]{

new GEValuePropertyChecker(60),new LEValuePropertyChecker(80)

},7,9));

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"));

}

}


}

没有设置编码,默认采用GBK编码。

运行结果:

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

陈寻|12语文|67.0

王老五|12语文|80.0

柯景腾|13语文|78.0

王小贱|15语文|60.0

李大仁|14语文|76.0

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

林嘉茉|14语文|68.0

苏凯|12语文|78.0

第5行,分数值必须小于等于80.0;

第7行,分数值必须大于等于60.0;

第9行,分数值必须大于等于60.0;

第10行,分数值必须小于等于80.0;

第11行,分数值必须小于等于80.0;

第13行,分数值必须大于等于60.0;

第15行,分数值必须小于等于80.0;


本文出自 “菜鸟博博” 博客,请务必保留此出处http://zhangxiao2.blog.51cto.com/6342789/1591291

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