通过关键字替换在对应目录生成相应的文件

import java.io.File;
import java.io.IOException;
import java.util.regex.Pattern;

public class GenUtil {

    public static void main(String[] args) {

        gen("Gzp","Czp");
    }

    /**
     *
     * @param originName 源文件  如:Gzp.java   originName:Gzp
     * @param genName 生成文件 如:Czp.java genName:Czp
     */
    public static void gen(String originName,String genName){
        String templatefClassName = originName;

        String genClassName = genName;

        String parentPacketPath = getCurrentPacketPath();

        String rootPacketPath= getParentPath(parentPacketPath);

        genDomainFile(templatefClassName, genClassName, rootPacketPath);

        genServiceFile(templatefClassName, genClassName, rootPacketPath);

        genServiceImplFile(templatefClassName, genClassName, rootPacketPath);

        genRositoryFile(templatefClassName, genClassName, rootPacketPath);
    }

    private static void genDomainFile(String templatefClassName, String genClassName, String parentPacketPath) {
        //domain包路径
        String domainPacket = parentPacketPath + "domain\\";
        //生成domain类
        String genDomainClassName = genClassName;
        String domainTemplateFilePath = domainPacket + templatefClassName + ".java";
        String domainCode = simpleGen(domainTemplateFilePath, templatefClassName, genClassName);
        FileUtil.writeFile(domainPacket + genDomainClassName + ".java", domainCode);
    }

    private static void genServiceFile(String templatefClassName, String genClassName, String parentPacketPath) {
        //service包路径
        String serviceservicePacket = parentPacketPath + "service\\";
        //生成service
        String serviceClassName = genClassName + "Service";
        String serviceservicetemplateFilePath = serviceservicePacket + templatefClassName + "Service.java";
        String serviceCode = genServiceCode(serviceservicetemplateFilePath, templatefClassName, genClassName);
        FileUtil.writeFile(serviceservicePacket + serviceClassName + ".java", serviceCode);
    }

    private static void genServiceImplFile(String templatefClassName, String genClassName, String parentPacketPath) {
        //service\impl包路径
        String serviceImplPacket = parentPacketPath + "service\\impl\\";
        //生成serviceImpl
        String serviceImplClassName = genClassName + "ServiceImpl";
        String serviceImpltemplateFilePath = serviceImplPacket + templatefClassName + "ServiceImpl.java";
        String serviceImplCode = genServiceImplCode(serviceImpltemplateFilePath, templatefClassName, genClassName);
        FileUtil.writeFile(serviceImplPacket + serviceImplClassName + ".java", serviceImplCode);

    }

    private static void genRositoryFile(String templatefClassName, String genClassName, String parentPacketPath) {
        //repository包路径
        String repositoryPacket = parentPacketPath + "repository\\";
        //生成Repository
        String repositoryClassName = genClassName + "Repository";
        String repositorytemplateFilePath = repositoryPacket + templatefClassName + "Repository.java";
        String repositoryCode = genRepositoryCode(repositorytemplateFilePath, templatefClassName, genClassName);
        FileUtil.writeFile(repositoryPacket + repositoryClassName + ".java", repositoryCode);
    }

    private static String genRepositoryCode(String domaintemplateFilePath, String templatefClassName, String genClassName) {
        return simpleGen(domaintemplateFilePath, templatefClassName, genClassName);
    }

    private static String genServiceImplCode(String domaintemplateFilePath, String templatefClassName, String genClassName) {
        return simpleGen(domaintemplateFilePath, templatefClassName, genClassName);
    }

    private static String genServiceCode(String domaintemplateFilePath, String templatefClassName, String genClassName) {
        return simpleGen(domaintemplateFilePath, templatefClassName, genClassName);
    }

    public static String getParentPath(String templateFilePath) {
        String pathPart = FileUtil.getPathPart(templateFilePath);
        return pathPart + "\\";
    }


    public static String removeBody(String content) {
        return Pattern.compile("\\{(.*)\\}?", Pattern.CASE_INSENSITIVE | Pattern.DOTALL).matcher(content).replaceAll("{body}");
    }

    public static String field(int i) {
        String field = String.format("@Column(name = \"file_name%d\") \nprivate String field%d; \n", i, i);
        return field;
    }

    public static String genDomainCode(String templateFilePath, String originClassName, String genClassName) {
        String content = FileUtil.readFile(templateFilePath);
        content = replaceClassName(content, originClassName, genClassName);
        content = removeBody(content);
        StringBuilder body = new StringBuilder();
        int fieldNum = 10;
        body.append("{ \n");
        for (int i = 0; i < fieldNum; i++) {
            body.append(field(i));
        }
        body.append("}");
        return content.replace("{body}", body.toString());
    }

    private static String simpleGen(String templateFilePath, String originClassName, String genClassName) {
        String content = FileUtil.readFile(templateFilePath);
        content = replaceClassName(content, originClassName, genClassName);
        return content;
    }

    public static String replaceClassName(String content, String origin, String to) {
        return Pattern.compile(origin, Pattern.CASE_INSENSITIVE | Pattern.DOTALL).matcher(content).replaceAll(to);
    }

    /**
     * 获取当前类的的路径
     */
    public static String getCurrentPacketPath() {

        //获取项目的路径
        File directory = new File("");// 参数为空
        String courseFile = null;
        try {
            courseFile = directory.getCanonicalPath() + "\\";
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println(courseFile);

        //拼接maven项目 固有路径 src\main\java
        String temp = "src\\main\\java\\";

        //获取当前类的包路径
        Package aPackage = GenUtil.class.getPackage();
        String name = aPackage.getName();
        String packet = name.replaceAll("\\.", "\\\\") + "\\";

        //拼接
        String result = courseFile + temp + packet;
        System.out.printf(result);

        return result;
    }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值