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(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的工具类的更多相关文章
- 【freemaker】之FreeMakerUtil工具类
Freemaker生成文件常用工具类 public class FreemakerUtil { private static FreemakerUtil util; private static Co ...
- Freemarker工具类
Freemarker文件模板工具类 提供了解析生成文件.解析生成字符串的两个方法! package org.lunatic.util; import java.io.File; import java ...
- Java基础Map接口+Collections工具类
1.Map中我们主要讲两个接口 HashMap 与 LinkedHashMap (1)其中LinkedHashMap是有序的 怎么存怎么取出来 我们讲一下Map的增删改查功能: /* * Ma ...
- Android—关于自定义对话框的工具类
开发中有很多地方会用到自定义对话框,为了避免不必要的城府代码,在此总结出一个工具类. 弹出对话框的地方很多,但是都大同小异,不同无非就是提示内容或者图片不同,下面这个类是将提示内容和图片放到了自定义函 ...
- [转]Java常用工具类集合
转自:http://blog.csdn.net/justdb/article/details/8653166 数据库连接工具类——仅仅获得连接对象 ConnDB.java package com.ut ...
- js常用工具类.
一些js的工具类 复制代码 /** * Created by sevennight on 15-1-31. * js常用工具类 */ /** * 方法作用:[格式化时间] * 使用方法 * 示例: * ...
- Guava库介绍之实用工具类
作者:Jack47 转载请保留作者和原文出处 欢迎关注我的微信公众账号程序员杰克,两边的文章会同步,也可以添加我的RSS订阅源. 本文是我写的Google开源的Java编程库Guava系列之一,主要介 ...
- Java程序员的日常—— Arrays工具类的使用
这个类在日常的开发中,还是非常常用的.今天就总结一下Arrays工具类的常用方法.最常用的就是asList,sort,toStream,equals,copyOf了.另外可以深入学习下Arrays的排 ...
- .net使用正则表达式校验、匹配字符工具类
开发程序离不开数据的校验,这里整理了一些数据的校验.匹配的方法: /// <summary> /// 字符(串)验证.匹配工具类 /// </summary> public c ...
随机推荐
- iOS 符号化崩溃日志
1.获取一下三个文件 1. crash报告(.crash文件) 2. 符号文件 (.dsymb文件) 3. 应用程序文件 (appName.app文件,把IPA文件后缀改为zip,然后解压,Pay ...
- 页游手游服务器(五)sql缓存层
sql的通用缓存,是实现最麻烦的一部分,对于查询结果的缓存,主要有如下的结构来缓存: cache tablename--player statement--select * from player w ...
- Function- 几个转换函数
几个转换函数 SJIS_DBC_TO_SBC 全角转半角SJIS_SBC_TO_DBC 半角转全角 CLPB_IMPORT :从剪贴板导入internal tableCLPB_EXPORT : 从in ...
- (转)关于Http协议,一片就够了
HTTP简介 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送 ...
- LeetCode:移除K位数字【402】
LeetCode:移除K位数字[402] 题目描述 给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小. 注意: num 的长度小于 10002 且 ≥ k. nu ...
- HackerRank - camelcase 【字符串】
思路 找单词 第一个 单词 是小写 然后 后面的单词 第一位 都是大写 刚开始 初始化 ans = 1 然后 往后遍历 碰到 大写的 更新答案 AC代码 #include <cstdio> ...
- [原创]java WEB学习笔记20:MVC案例完整实践(part 1)---MVC架构分析
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- hid_info函数分析
昨天博文<linux下无线鼠标驱动执行流程>中有一行输出信息很让我迷惑,如下所示: [ :1D57: Mouse [HID Wireless Mouse HID Wireless Mous ...
- hive启动时 Terminal initialization failed; falling back to unsupported java.lang.IncompatibleClassChangeError: Found class jline.Terminal, but interface was expected
错误提示信息如下 [ERROR] Terminal initialization failed; falling back to unsupported java.lang.IncompatibleC ...
- eclipse从Git获取项目更新
1.项目上右键 ——> Team ——> pull 如果报错: 解决方法: 依次打开:Window ——> Preferences ——> Team ——> ...