package com.szmirren.common; import java.io.File; import java.io.FileOutputStream; import java.io.OutputStreamWriter; import java.io.Writer; import java.nio.file.Files; import java.nio.file.Paths; import java.util.HashMap; import java.util.Map; import org.apache.log4j.Logger; import com.szmirren.entity.GeneratorContent; import freemarker.template.Configuration; import freemarker.template.DefaultObjectWrapper; import freemarker.template.Template; /** * 创建文件的 的工具 * * @author <a href="http://szmirren.com">Mirren</a> * */ public class CreateFileUtil { private static final Logger LOG = Logger.getLogger(CreateFileUtil.class); /** * 执行创建文件 * * @param content * 模板所需要的上下文 * @param templeteName * 模板的名字 示例:Entity.ftl * @param projectPath * 生成的项目路径 示例:D://create * @param packageName * 包名 示例:com.szmirren * @param fileName * 文件名 示例:Entity.java * @param codeFormat * 输出的字符编码格式 示例:UTF-8 * @throws Exception */ public static void createFile(GeneratorContent content, String templeteName, String projectPath, String packageName, String fileName, String codeFormat, boolean isOverride) throws Exception { String outputPath = projectPath + "/" + packageName.replace(".", "/") + "/"; if (!isOverride) { if (Files.exists(Paths.get(outputPath + fileName))) { LOG.debug("设置了文件存在不覆盖,文件已经存在,忽略本文件的创建"); return; } } Configuration config = new Configuration(Configuration.VERSION_2_3_23); String tempPath = Paths.get(Constant.TEMPLATE_DIR_NAME).toFile().getName(); config.setDirectoryForTemplateLoading(new File(tempPath)); config.setObjectWrapper(new DefaultObjectWrapper(Configuration.VERSION_2_3_23)); config.setDefaultEncoding("utf-8"); Template template = config.getTemplate(templeteName); Map<String, Object> item = new HashMap<>(); item.put("content", content); if (!Files.exists(Paths.get(outputPath))) { Files.createDirectories(Paths.get(outputPath)); } try (Writer writer = new OutputStreamWriter(new FileOutputStream(outputPath + fileName), codeFormat)) { template.process(item, writer); } } }