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. Python菜鸟之路:Python基础-生成器和迭代器、递归

    一.迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,知道所有的元素被访问完结束.迭代器只能往前不会后退. 1. 迭代器优点 对于无法随机访问的数据结构(比如set)而言, ...

  2. Linux安装python3.7.2详细操作步骤

    1.下载Python依赖环境 yum install gcc patch libffi-devel python-devel zlib-devel bzip2-devel openssl-devel ...

  3. 016-Spring Boot JDBC

    一.数据源装配 通过查看代码可知,默认已装配了数据源和JdbcTemplate System.out.println(context.getBean(DataSource.class)); Syste ...

  4. scala与java之间的那些事

    scala与java之间的关系,我认为可以用一句话来开头:scala来源于java,但又高于java. scala的设计者Martin Odersky就是一个JAVA控,这位牛人设计了javac和编写 ...

  5. Spring之AOP由浅入深(转发:https://www.cnblogs.com/zhaozihan/p/5953063.html)

    1.AOP的作用 在OOP中,正是这种分散在各处且与对象核心功能无关的代码(横切代码)的存在,使得模块复用难度增加.AOP则将封装好的对象剖开,找出其中对多个对象产生影响的公共行为,并将其封装为一个可 ...

  6. ubuntu android studio 编译及运行错误Error retrieving parent for item: No resource found that matches the given name

    安装好android studio并且安装其它需要的SDK或组件后,根据向导生成新的项目, 编译或运行时可能会出现下面的错误: Error:Error retrieving parent for it ...

  7. static{}块的作用

    本文转载自: https://www.cnblogs.com/caolaoshi/p/7824748.html static{}块,会且仅会在类被加载时执行一次,多用于定义静态变量或执行静态方法. 什 ...

  8. Luogu-4049 [JSOI2007]合金

    题目中给出了三种金属的比例,实际上只用考虑两个就可以,第三个可以由另外两个确定qwq 如果把原料和需求看做二维平面上的点,可以发现两种原料能混合成的比例就在他们相连的线段上,也就是说线段上的点都能混合 ...

  9. GVM管理Go版本

    1.为什么要安装GVM 1.1什么是GVM GVM是一个golang虚拟环境配置工具,其允许一台机器上安装多个golang版本,gvm是第三方开发的Go多版本管理工具,类似ruby里面的rvm工具.使 ...

  10. vs2017调用目标发生了异常

    解决办法: 1. 在开始菜单,找到“Visual Studio Tools”文件夹中的“VS 2017的开发人员命令提示符 ” 运行. 2. 输入:devenv /Safemode 3. 会以安全模式 ...