FreemarkerUtil
package zj.freemarker.util; import java.io.BufferedOutputStream; import java.io.BufferedWriter; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.io.StringWriter; import java.util.Map; import zj.check.util.CheckUtil; import zj.common.exception.ServiceException; import zj.freemarker.bean.Freemarker; import zj.io.util.FileUtil; import freemarker.cache.ClassTemplateLoader; import freemarker.cache.FileTemplateLoader; import freemarker.cache.MultiTemplateLoader; import freemarker.cache.TemplateLoader; import freemarker.template.Configuration; import freemarker.template.Template; import freemarker.template.TemplateException; /** * FreemarkerUtil工具类 * * @version 1.00 (2014.09.15) * @author SHNKCS 张军 {@link <a href=http://www.521shanshan.com>张军个人网站</a> <a href=http://user.qzone.qq.com/360901061/>张军QQ空间</a>} */ public class FreemarkerUtil { // private transient static final Logger logger = Logger.getLogger(TestXml.class); // /** // * 取得freemarker模板 // * // * @param name // * 模板名 // * @param path // * 模板路径 // * @return 模板对象 // * @throws IOException // */ // public static final Template getTemplate(String name) throws IOException { // // 通过Freemarker的Configuration读取相应的ftl // Configuration cfg = new Configuration(Configuration.getVersion()); // // // 设定去哪里去读取相应的ftl模板文件 // cfg.setClassForTemplateLoading(FreemarkerUtil.class, "/ftl/mybatis"); // // cfg.setServletContextForTemplateLoading(servletContext, path); // // cfg.setDirectoryForTemplateLoading(new File("E:/versionManager/sources/java/zj-model/freemarker/freemarker-helloworld/src/main/resources/ftl")); // // 在模板文件目录中找到名称为name的文件 // Template temp = cfg.getTemplate(name); // return temp; // } /** * 取得freemarker模板 * * @param name * 模板名 * @param path * 模板路径 * @author 张军 * @date 2015-11-03 21:59:00 * @modifiyNote * @version 1.0 * @return 模板对象 * @throws IOException */ public static final Template getTemplates(Freemarker freemarker) throws IOException { // 通过Freemarker的Configuration读取相应的ftl Configuration cfg = new Configuration(Configuration.getVersion()); // // 设定去哪里去读取相应的ftl模板文件 // cfg.setClassForTemplateLoading(FreemarkerUtil.class, "/ftl/mybatis"); // cfg.setServletContextForTemplateLoading(servletContext, path); // cfg.setDirectoryForTemplateLoading(new File("E:/versionManager/sources/java/zj-model/freemarker/freemarker-helloworld/src/main/resources/ftl")); if (freemarker.getFtlPaths() == null) { freemarker.setFtlPaths(new String[] { "/ftl" }); } TemplateLoader[] loaders = null; if (Freemarker.LOADING_PATH_FILE.equals(freemarker.getLoadingPath())) { // 从文件中加载 loaders = new FileTemplateLoader[freemarker.getFtlPaths().length]; for (int i = 0; i < freemarker.getFtlPaths().length; i++) { loaders[i] = new FileTemplateLoader(new File(freemarker.getFtlPaths()[i])); } } else { loaders = new ClassTemplateLoader[freemarker.getFtlPaths().length]; for (int i = 0; i < freemarker.getFtlPaths().length; i++) { loaders[i] = new ClassTemplateLoader(FreemarkerUtil.class, freemarker.getFtlPaths()[i]); } } MultiTemplateLoader mtl = new MultiTemplateLoader(loaders); cfg.setTemplateLoader(mtl); // 在模板文件目录中找到名称为name的文件 Template temp = cfg.getTemplate(freemarker.getName(), freemarker.getCharsetName()); return temp; } /** * 写入文件内容 * * @param freemarker * 模板对象值 * @author 张军 * @date 2015-11-03 21:59:00 * @modifiyNote * @version 1.0 * @throws IOException * @throws TemplateException */ public static final void writeFile(Freemarker freemarker) { BufferedWriter bw = null; OutputStreamWriter osw = null; BufferedOutputStream bos = null; FileOutputStream fos = null; try { Map<String, Object> rootMap = freemarker.getRootMap(); File outFile = freemarker.getOutFile(); String charsetName = freemarker.getCharsetName(); boolean append = freemarker.isAppend(); FileUtil.createFolderOrFile(outFile, false); fos = new FileOutputStream(outFile, append); bos = new BufferedOutputStream(fos); if (CheckUtil.isNull(charsetName)) { charsetName = "UTF-8"; } osw = new OutputStreamWriter(bos, charsetName); bw = new BufferedWriter(osw); Template temp = getTemplates(freemarker); temp.process(rootMap, bw); bw.flush(); } catch (Exception e) { throw new ServiceException(e); } finally { if (fos != null) { try { fos.close(); fos = null; } catch (Exception e) { } } if (bos != null) { try { bos.close(); bos = null; } catch (Exception e) { } } if (osw != null) { try { osw.close(); osw = null; } catch (Exception e) { } } if (bw != null) { try { bw.close(); bw = null; } catch (Exception e) { } } // Runtime.getRuntime().gc(); // System.gc(); } } /** * 打印控制台 * * @param freemarker * 模板对象值 * @author 张军 * @date 2015-11-03 21:59:00 * @modifiyNote * @version 1.0 * @throws IOException * @throws TemplateException */ public static final String getContent(Freemarker freemarker) throws IOException, TemplateException { StringWriter sw = new StringWriter(); Template temp = getTemplates(freemarker); // 通过模板文件输出到相应的流中 temp.process(freemarker.getRootMap(), sw); sw.flush(); String content = sw.toString(); sw.close(); return content; } /** * 打印控制台 * * @param freemarker * 模板对象值 * @author 张军 * @date 2015-11-03 21:59:00 * @modifiyNote * @version 1.0 * @throws IOException * @throws TemplateException */ public static final void printConsole(Freemarker freemarker) throws IOException, TemplateException { Template temp = getTemplates(freemarker); // 通过模板文件输出到相应的流中 temp.process(freemarker.getRootMap(), new PrintWriter(System.out)); } }
Freemarker
package zj.freemarker.bean; import java.io.File; import java.util.Map; import lombok.Data; import zj.check.util.CheckUtil; /** * FreemarkerUtil工具类实体参数 * * @version 1.00 (2014.09.15) * @author SHNKCS 张军 {@link <a href=http://www.521shanshan.com>张军个人网站</a> <a href=http://user.qzone.qq.com/360901061/>张军QQ空间</a>} */ @Data public class Freemarker { /** * 从class中加载 */ public final static String LOADING_PATH_CLASS = "class"; /** * 从file中加载 */ public final static String LOADING_PATH_FILE = "file"; /** * 从servlet中加载 */ public final static String LOADING_PATH_SERVLET = "servlet"; /** * 载入路径方式 */ private String loadingPath; /** * 模板名 */ private String name; /** * 多个模板路径 */ private String[] ftlPaths; /** * 顶层变量数据 */ private Map<String, Object> rootMap; /** * 输出文件 */ private File outFile; /** * 编码,默认UTF-8 */ private String charsetName = "UTF-8"; /** * 是否追加 */ private boolean append; /** * @Description * @author 张军 * @date 2017年1月9日 下午5:09:02 * @version V1.0 * @return the loadingPath */ public String getLoadingPath() { return CheckUtil.isNull(loadingPath) ? LOADING_PATH_CLASS : loadingPath; } public void setFtlPaths(String... ftlPaths) { this.ftlPaths = ftlPaths; } }
本文为张军原创文章,转载无需和我联系,但请注明来自张军的军军小站,个人博客http://www.zhangjunbk.com