# dataParse
**Repository Path**: dairui/dataParse
## Basic Information
- **Project Name**: dataParse
- **Description**: 在实际开发中常遇到文本类文件的解析,并且文本格式内容经常变化。本项目主要用于解决这种场景
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 3
- **Created**: 2018-06-19
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
在实际开发中常遇到文本类文件的解析,并且文本格式内容经常变化。本项目主要用于解决这种场景
# 开发指南
- JDK 1.5+
## 一、简单使用
从一行数据中提取一个对象
> 1.文件
比如一个文件是“data.txt”
里面内容的格式是:
“## 张三 2017-01-01”
> 2.实体类
@DataConfig(dataType = DataType.TEXT, split = " ")
public class User {
private Integer id;
@ColumnConfig(index = 1)
private String name;
@ColumnConfig(index = 2, datePattern = "yyyy-MM-dd")
private Date brithday;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getBrithday() {
return brithday;
}
public void setBrithday(Date brithday) {
this.brithday = brithday;
}
}
> 3.直接使用
public static void main(String[] args) {
String str = "111 张三 2017-01-01";//模拟这是一行文本
ParseFactory.register(User.class);
try {
User user = ParseFactory.getMapper(User.class).parse(str);
System.out.println(user);
} catch (DataParseException e) {
e.printStackTrace();
}
}
> 4.spring支持
>> 4.1 spring 配置
com.zx.test.User
>> 4.2 spring使用
@SuppressWarnings("resource")
public static void main(String[] args) {
String str = "1111 张三 2017-01-01";
ClassPathXmlApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
app.start();
try {
User user = ParseFactory.getMapper(User.class).parse(str);
System.out.println(user);
} catch (DataParseException e) {
e.printStackTrace();
}
}
## 二、集合应用
从一行数据中提取一个JavaList
> 1.文件
比如一个文件是“data.txt”
里面内容的格式是:
“张三 2017-01-01 李四 2017-02-02 王五 2017-02-02 111 2017”
> 2.实体类
arrayInterval为序号的间隔,也就是同种数据在一行数组中索引的差值。
arrayInterval是需求解析成集合的时候元素的个数
@DataConfig(dataType = DataType.TEXT, split = " ", arrayInterval = 2)
public class User2 {
private Integer id;
@ColumnConfig(index = 0)
private String name;
@ColumnConfig(index = 1, datePattern = "yyyy-MM-dd")
private Date brithday;
}
> 3.直接使用
public static void main(String[] args) {
String str = "张三 2017-01-01 李四 2017-02-02 王五 2017-02-02 111";
ParseFactory.register(User2.class);
try {
List parseList = ParseFactory.getMapper(User2.class).parseList(str);
for (User2 user : parseList) {
System.out.println(user);
}
} catch (DataParseException e) {
e.printStackTrace();
}
}
> 4.spring支持
使用方法同上面的
## 三、解析文本
适用于普通的小文本解析。
public void test() throws IOException {
// 注册类的解析器,自动返回一个解析器
DataConfigProcess dataConfigProcess = ParseFactory.register(User.class);
// 获得类的解析器
//DataConfigProcess dataConfigProcess = ParseFactory.getMapper(User.class);
String filePath = "src/test/java/data/bb.txt";
// 读取小文件
TextFileReader reader = new TextFileReader(filePath, dataConfigProcess.charsetName());
// 获得所有行
List readLines = reader.readLines();
// 遍历解析
for (String str : readLines) {
try {
User user = dataConfigProcess.parse(str);
System.out.println(user);
} catch (DataParseException e) {
e.printStackTrace();
}
}
// 直接解析全部数据
try {
List parseList = dataConfigProcess.parseList(readLines);
System.out.println(parseList);
} catch (DataParseException e) {
e.printStackTrace();
}
// 关闭资源
reader.close();
}