Freemarker工具類


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));
    }
    
    
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM