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(Configuration.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;
}
}

留着以后备用

freeMaker的工具类的更多相关文章

  1. 【freemaker】之FreeMakerUtil工具类

    Freemaker生成文件常用工具类 public class FreemakerUtil { private static FreemakerUtil util; private static Co ...

  2. Freemarker工具类

    Freemarker文件模板工具类 提供了解析生成文件.解析生成字符串的两个方法! package org.lunatic.util; import java.io.File; import java ...

  3. Java基础Map接口+Collections工具类

    1.Map中我们主要讲两个接口 HashMap  与   LinkedHashMap (1)其中LinkedHashMap是有序的  怎么存怎么取出来 我们讲一下Map的增删改查功能: /* * Ma ...

  4. Android—关于自定义对话框的工具类

    开发中有很多地方会用到自定义对话框,为了避免不必要的城府代码,在此总结出一个工具类. 弹出对话框的地方很多,但是都大同小异,不同无非就是提示内容或者图片不同,下面这个类是将提示内容和图片放到了自定义函 ...

  5. [转]Java常用工具类集合

    转自:http://blog.csdn.net/justdb/article/details/8653166 数据库连接工具类——仅仅获得连接对象 ConnDB.java package com.ut ...

  6. js常用工具类.

    一些js的工具类 复制代码 /** * Created by sevennight on 15-1-31. * js常用工具类 */ /** * 方法作用:[格式化时间] * 使用方法 * 示例: * ...

  7. Guava库介绍之实用工具类

    作者:Jack47 转载请保留作者和原文出处 欢迎关注我的微信公众账号程序员杰克,两边的文章会同步,也可以添加我的RSS订阅源. 本文是我写的Google开源的Java编程库Guava系列之一,主要介 ...

  8. Java程序员的日常—— Arrays工具类的使用

    这个类在日常的开发中,还是非常常用的.今天就总结一下Arrays工具类的常用方法.最常用的就是asList,sort,toStream,equals,copyOf了.另外可以深入学习下Arrays的排 ...

  9. .net使用正则表达式校验、匹配字符工具类

    开发程序离不开数据的校验,这里整理了一些数据的校验.匹配的方法: /// <summary> /// 字符(串)验证.匹配工具类 /// </summary> public c ...

随机推荐

  1. Delphi窗体研究,留个爪,以后回来研究

    Delphi - 窗体创建过程   来自大富翁. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 ...

  2. 在函数中如何获取 线程对象、线程唯一ID

    threading.current_thread() threading.current_thread().ident

  3. Android UI Design

    Ref:直接拿来用!10款实用Android UI工具 Ref:Android UI设计资源 Ref:Android酷炫实用的开源框架(UI框架) Ref:Android UI 组件 Ref:Andr ...

  4. 有关numpy.random下的API具体含义

    1.numpy.random.random(size=None) Return random floats in the half-open interval [0.0, 1.0). 返回size大小 ...

  5. Linux expect介绍和用法

    expect时用与提供自动交互的工具.比如如果想要用ssh登陆服务器,每次都输入密码你觉得麻烦,那你就可以使用expect来做自动交互,这样的话就不用每次都输入密码了. 先看例子: #!/usr/bi ...

  6. WPF之基础概念

    一:App环境承载 我们都知道Console和WinForm程序的入口都是Main函数,WPF同样也不例外,好了,我们就新建一个WPF应用程序,VS会给我们自动生成一个MainWindow.xaml和 ...

  7. spring项目命名

    groupId 一般分为多个段,最简单的分两段,第一段为域,第二段为公司名称.域又分为org.com.cn等等许多, 举个apache公司的tomcat项目例子:这个项目的groupId是org.ap ...

  8. 第十二、模块二、调用中国天气网和qqOnline及TrainTimeWebService接口来突出Json方法

    一. 浏览网页的时候,发送的请求.服务器反回来的永远是字符串,由于服务器后台使用的语言不通,所以就需要用工具反解,这里用到了json json方法一 json.loads()将字符串转化为python ...

  9. castle windsor学习-----Fluent Registration API 注册

    使用xml配置和fluent注册两种搭配使用需要注意的是: 如果先在WindsorContainer构造函数指明用xml配置进行注册,如下设置 IWindsorContainer container ...

  10. 算法(Algorithms)第4版 练习 1.5.22

    package com.qiusongde; import edu.princeton.cs.algs4.StdOut; import edu.princeton.cs.algs4.StdStats; ...