# 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(); }