package org.yeshi.utils; import freemarker.cache.StringTemplateLoader; import freemarker.template.Configuration; import freemarker.template.Template; import org.apache.commons.io.IOUtils; import java.io.*; import java.util.Map; public class FreemarkerUtils { private static String defaultCharacter = "UTF-8"; private static Configuration cfg; private FreemarkerUtils() { } static { cfg = new Configuration(Configuration.getVersion()); cfg.setDefaultEncoding(defaultCharacter); cfg.setTagSyntax(Configuration.AUTO_DETECT_TAG_SYNTAX); } /** * 对模板进行渲染 * * @param data 数据Map * @param tplStr 模板 * @return */ public static String generateString(Object data, String tplStr) { String result = null; String name = "myStrTpl"; try { StringTemplateLoader stringTemplateLoader = new StringTemplateLoader(); stringTemplateLoader.putTemplate(name, tplStr); cfg.setTemplateLoader(stringTemplateLoader); Template template = cfg.getTemplate(name, defaultCharacter); StringWriter out = new StringWriter(); template.process(data, out); out.flush(); result = out.toString(); out.close(); } catch (Exception e) { e.printStackTrace(); } return result; } public static String generateInputStream(Object data, InputStream templateStream) throws IOException { String str = IOUtils.toString(templateStream, "UTF-8"); return generateString(data, str); } /** * 将模板渲染以后保存到文件 * * @param templateFileDir 模板目录 * @param templateFileName 模板文件名称 * @param targetFilePath 渲染后文件名称 * @param data 数据 * @return */ public static boolean renderingTemplateAndGenerateFile(String templateFileDir, String templateFileName, String targetFilePath,Object data) { boolean flag = true; try { // 设置文件所在目录的路径 cfg.setDirectoryForTemplateLoading(new File(templateFileDir));//模板路径 // 获取模版 Template template = cfg.getTemplate(templateFileName); // 设置输出文件名,和保存路径 File outFile = new File(targetFilePath); // 将模板和数据模型合并生成文件 重点设置编码集 BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "UTF-8")); // 生成文件 template.process(data, out); // 关闭流 out.flush(); out.close(); } catch (Exception e) { e.printStackTrace(); // logger.error("生产模板文件失败!",e); flag = false; } return flag; } public static boolean renderingTemplateAndGenerateFile(InputStream templateInput, String targetFilePath, Object data) throws Exception { String result = generateInputStream(data, templateInput); if (result != null) { FileUtil.saveAsFileByte(result.getBytes("UTF-8"), targetFilePath); return true; } return false; } }