freeMaker的工具类

package com.ek.util;

import java.io.BufferedWriter;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.io.StringWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Map;

import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;

import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import freemarker.template.Version;

/**
 * FreeMarkerUtil 工具类
 *
 * @author Duke
 *
 */
public class FreeMarkerUtil {

    // FreeMarker 配置
    private static Configuration cfg;

    /**
     * @author Duke 静态内部类,创建freeMarker 配置,实例化工具类
     */
    private static class LazyHolder {

        // 创建 freeMarker 配置 ,2.3.24  引入的freemarker 版本号
        private static final Configuration config = new Configuration(new Version("2.3.24"));

        // 实例化工具类
        private static final FreeMarkerUtil fk = new FreeMarkerUtil();
    }

    /**
     * 私有构造函数
     */
    private FreeMarkerUtil() {

    }

    /**
     * 初始化配置文件,获取实例
     *
     * @param templatePath 模板路径
     * @return FreeMarkerUtil 工具类
     */
    public static FreeMarkerUtil getInstance(String templatePath) {

        if (null == cfg) {

            // 创建 freeMarker 配置
            cfg = LazyHolder.config;

            // 设置编码格式
            cfg.setDefaultEncoding("UTF-8");

            // templatePath 指的是模板所在路径
            cfg.setClassForTemplateLoading(FreeMarkerUtil.class, templatePath);
        }

        return LazyHolder.fk;
    }

    /**
     * 根据模版名称加载对应模版
     *
     * @param templateName 模版名称
     * @return
     */
    private Template getTemplate(String templateName) {

        try {

            return cfg.getTemplate(templateName);
        }
        catch (IOException e) {

            e.printStackTrace();
        }

        return null;
    }

    /**
     * 控制台打印通过模板生成的文件
     *
     * @param dataModel 数据模型
     * @param templateName 输出模版
     */
    public String getContent(Map<String, Object> dataModel, String templateName) {

        try {

            StringWriter stringWriter = new StringWriter();

            getTemplate(templateName).process(dataModel, stringWriter);

            stringWriter.flush();

            String result = stringWriter.toString();

            stringWriter.close();

            return result;
        }
        catch (TemplateException e) {

            e.printStackTrace();
        }
        catch (IOException e) {

            e.printStackTrace();
        }

        return null;
    }

    /**
     * 创建通过模板生成的文件
     *
     * @param dataModel 数据模型
     * @param templateName 输出模版
     * @param filePath 输出文件路径
     */
    public File create(Map<String, Object> dataModel, String templateName, String filePath) {

        try {

            File file = new File(filePath);

            if (!file.getParentFile().exists()) {

                    file.getParentFile().mkdirs();
            }

            BufferedWriter bufWrite = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(filePath),"UTF-8"));
            getTemplate(templateName).process(dataModel, bufWrite);
            bufWrite.flush();
            bufWrite.close();

            return file;
        }
        catch (TemplateException e) {

            e.printStackTrace();
        }
        catch (IOException e) {

            e.printStackTrace();
        }

        return null;
    }

    /**
     * 根据地址获得数据的字节流
     *
     * @param strUrl 网络连接地址
     * @return 图片Base64码
     */
    public String getImgBase64ByUrl(String strUrl) {

        try {

            // 建立 Http 链接
            HttpURLConnection conn = (HttpURLConnection) new URL(strUrl).openConnection();

            // 5秒响应超时
            conn.setConnectTimeout(5 * 1000);
            conn.setDoInput(true);

            // 判断http请求是否正常响应请求数据,如果正常获取图片 Base64 码
            if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {

                // 获取图片输入流
                InputStream inStream = conn.getInputStream();

                // 用于存储图片输出流
                ByteArrayOutputStream outStream = new ByteArrayOutputStream();

                // 定义缓存流,用于存储图片输出流
                byte[] buffer = new byte[1024];

                int len = 0;

                // 图片输出流循环写入
                while ((len = inStream.read(buffer)) != -1) {

                    outStream.write(buffer, 0, len);
                }

                // 图片输出流转字节流
                byte[] btImg = outStream.toByteArray();

                inStream.close();
                outStream.flush();
                outStream.close();

                return new String(Base64.encode(btImg));
            }
        }
        catch (Exception e) {

            e.printStackTrace();
        }

        return null;
    }
}

留着以后备用

时间: 2024-08-01 10:27:27

freeMaker的工具类的相关文章

【freemaker】之FreeMakerUtil工具类

Freemaker生成文件常用工具类 public class FreemakerUtil { private static FreemakerUtil util; private static Configuration cfg; private FreemakerUtil(){ } //做成单例模式 public synchronized static FreemakerUtil getInstance(String pname){ if(util==null){ cfg = new Con

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 freema

Arrays工具类

Arraysd的静态方法能够方便的对数组进行操作,每个方法也加了注释 : 程序: import java.util.*;public class Array{        public static void main(String[] args){                int[]  arr={1,3,4,2};                System.out.println("排序前:");                printArray(arr);//打印原数组

常用工具类(System,Runtime,Date,Calendar,Math)

一.Sy 一个java.lang包中的静态工具类. 三大字段: static PrintStream err "标准"错误输出流. static InputStream in "标准"输入流. static PrintStream out "标准"输出流. 其他常用方法: 描述系统信息: 获取系统属性信息: static Properties getProperties(): (Properties是Hashtable的子类,也就是Map 的子类

iOS 中的正则匹配(工具类)

正则表达式 正则表达式是对字符串操作的一种逻辑公式, 用事先定义好的一些特定字符.及这些特定字符的组合, 组成一个"规则字符串", 这个"规则字符串"用来表达对字符串的一种过滤逻辑, 正则表达式就是用于描述这些规则的工具, 或者说, 正则表达式就是记录文本规则的代码. 在开发中, 我们经常会有查找符合某些复杂规则的字符串的需要, 比如数据校验: 判断用户的输入是否合法(如:用户注册的时候,QQ号码,电话号码,邮箱是否符合要求) 下面让我们先来看看正则匹配常用的一些字

(九十五)音效播放方法和工具类的制作

音效通过AVFoundation框架实现,是通过函数而不是方法,因此需要进行桥接等操作,具体步骤如下. 进行音效播放,首先要得到音效的URL(只能是本地音频),然后转换为音效ID(唯一),通过ID播放音效. [音效播放方法] ①导入框架主头文件 #import <AVFoundation/AVFoundation.h> ②通过Bundle拿到本地音效,然后调用AudioServicesCreateSystemSoundID函数得到音效ID,ID为0代表无效,以此为依据可进行懒加载 @inter

spring endpoint工具类

工具类代码 @Controller public class EndpointDocController {     private final RequestMappingHandlerMapping handlerMapping;     @Autowired     public EndpointDocController(RequestMappingHandlerMapping handlerMapping) {         this.handlerMapping = handler

web常用的工具类总结

数据库的链接的操作类 package utils; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class DBConnection { private static final String DBDRIVER = "com.m

字符串工具类(指定字符串的长度和判断是否为空等方法)

package com.sec.util; /** * 字符串工具类 * @author Administrator * */public class StringUtil { /** * 过滤<,>,\n 字符串的方法 * @param input * @return */ public static String filterHTML(String input){ if(input == null || input.length() == 0){ return input; } input