package util; import java.io.*; import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * @author bin.zhao * @description 读取文件中的字段, 生成符合我们使用的对应的实体类,命名规则小驼峰式(nameCode),生成加下划线的@JSONField(name = "name_code"),其他不变 * 注意data.txt文件的第一行是要生成的class文件的名字,剩下的是文件的字段,目前只支持String类型,后续扩展各种类型 * 目前默认读取工程目录下的data.txt文件,可根据需要改变读取路径 * 生成的java文件也在工程目录下,可以根据需要调整 * @date 2020/4/24 */ public class JavaToPoJo { private static List<String> attres = new ArrayList<>(); private static StringBuilder sb = new StringBuilder(); public static void main(String[] args) throws IOException { //获取字段构成的列表 getAttrs(); //创建文件; createFile(); //生成文件 writerFile(); System.out.println(attres); } private static void writerFile() throws IOException { BufferedWriter bw = new BufferedWriter(new FileWriter(attres.get(0)+".java")); bw.write(sb.toString(),0,sb.length()); bw.flush(); bw.close(); } //创建java实体类 private static void createFile() { //生成头部 sb.append("import com.alibaba.fastjson.annotation.JSONField;\r\nimport java.io.Serializable;\r\n\r\npublic class "+ attres.get(0) + " implements Serializable{\r\n"); sb.append("\tprivate static final long serialVersionUID = 1L;\r\n\r\n"); //生成所有的属性 createAttributes(); //生成所有的get/set方法 createMethods(); //结尾 sb.append("}"); } //创建set/get方法 private static void createMethods() { for (int i = 1; i < attres.size(); i++) { sb.append("\tpublic String get"+toUpFirstLetter(attres.get(i))+"(){\r\n"); sb.append("\t\treturn "+attres.get(i)+";\r\n\t}\r\n\r\n"); sb.append("\tpublic void set"+toUpFirstLetter(attres.get(i))+"(String "+attres.get(i)+"){\r\n"); sb.append("\t\tthis."+attres.get(i)+" = "+attres.get(i)+";\r\n\t}\r\n\r\n"); } } //首字母大写 private static String toUpFirstLetter(String s) { char[] chars = s.toCharArray(); if (chars[0] >= 'a' && chars[0] <= 'z'){ chars[0] = (char)(chars[0]-32); } return new String(chars); } //创建所有的属性 private static void createAttributes() { for (int i = 1; i < attres.size(); i++) { sb.append("\t@JSONField(name = \""+subAttribute(attres.get(i))+"\")\r\n"); sb.append("\tprivate String "+ attres.get(i) + ";\r\n\r\n"); } } //根据大写首字母对字段进行分割并加下划线处理 private static String subAttribute(String name){ //创建一个匹配模式 Pattern p = Pattern.compile("[A-Z]"); //创建使用指定的正则模式的匹配器 Matcher m = p.matcher(name); while(m.find()){//如果匹配上了返回true //根据匹配上的字符进行替换,加上_并转换为小写 name = name.replaceFirst(m.group(),"_"+m.group().toLowerCase()); } return name; } //按行读取文件内容,组成一个字段list private static void getAttrs() throws IOException { BufferedReader reader = new BufferedReader(new FileReader("data.txt")); String s = ""; while(true){ s = reader.readLine(); if (s==null) break; attres.add(s); } reader.close(); } }