Freemarker文件模板工具類
提供了解析生成文件、解析生成字符串的兩個方法!
package org.lunatic.util; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.StringWriter; import java.util.Map; import freemarker.template.Configuration; import freemarker.template.Template; import freemarker.template.TemplateException; public class FreemarkerUtil { private static final Integer TEMPLATE_LOADING_FILE = 1; private static final Integer TEMPLATE_LOADING_PROJECT = 2; private static Configuration freemarkerConfig; static{ try { initConfig(TEMPLATE_LOADING_FILE, "E:/Lunatic/workspaces/FreemarkerDemo/ftl"); } catch (Exception e) { e.printStackTrace(); } } /** * 初始化Freemarker參數配置 * @param type 模板文件夾路徑類型,1:文件系統路徑;2:項目路徑 * @param dir 模板文件夾路徑,當type=1時,文件系統中的絕對路徑;當type=2時,項目中相對路徑,與src同級開始,以"/開頭" * @throws Exception */ public static void initConfig(Integer type,String dir) throws Exception{ /** * 通過Freemaker的Configuration讀取相應的ftl,配置Freemarker模板參數信息 */ freemarkerConfig = new Configuration(); /** * 設置模板本件夾路徑: * 1、setDirectoryForTemplateLoading,文件系統絕對路徑 * 2、setClassForTemplateLoading項目相對路徑 */ if(TEMPLATE_LOADING_FILE == type){ try { freemarkerConfig.setDirectoryForTemplateLoading(new File(dir)); } catch (IOException e) { throw new Exception("設置模板文件夾異常",e); } } if(TEMPLATE_LOADING_PROJECT == type){ freemarkerConfig.setClassForTemplateLoading(FreemarkerUtil.class,dir); } } /** * 獲取Freemarker模板文件 * @param name 文件名 * @return */ public static Template getTemplate(String name) { Template temp = null; try { temp = freemarkerConfig.getTemplate(name,"UTF-8"); } catch (IOException e) { e.printStackTrace(); } return temp; } /** * 將解析之后的文件內容保存到文件中 * @param name 模板文件名 * @param root 數據Map * @param outFile 保存文件路徑 */ public static void printFile(String name,Map<String,Object> root,String outFile) { FileWriter out = null; try { //通過一個文件輸出流,就可以寫到相應的文件中 out = new FileWriter(new File(outFile)); Template temp = getTemplate(name); temp.process(root, out); } catch (IOException e) { e.printStackTrace(); } catch (TemplateException e) { e.printStackTrace(); } finally { try { if(out!=null) out.close(); } catch (IOException e) { e.printStackTrace(); } } } /** * 將解析之后的文件內容返回字符串 * @param name 模板文件名 * @param root 數據Map * @return */ public static String printString(String name,Map<String,Object> root) { StringWriter out = new StringWriter(); try { //通過一個文件輸出流,就可以寫到相應的文件中 Template temp = getTemplate(name); temp.process(root, out); } catch (IOException e) { e.printStackTrace(); } catch (TemplateException e) { e.printStackTrace(); } finally { try { if(out!=null) out.close(); } catch (IOException e) { e.printStackTrace(); } } return out.toString(); } /** * 將解析之后的文件內容打印在控制台 * @param name 模板文件名 * @param root 數據Map */ public static void printConsole(String name,Map<String,Object> root) { System.out.println(printString(name, root)); } }