首页 > 代码库 > 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按字节导入(七)