有时候导入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;