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