本文是一个很简单很基础的Freemarker模板解析测试类,复杂的也是在此基础上添加一些代码优化而来,懂得基础流程后就能融会贯通了

POM:

<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.9</version>
</dependency>

JAVA:

 import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.Reader;
import java.io.Writer;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map; import freemarker.template.Template;
import freemarker.template.TemplateException; /**
* Freemarker测试类
*
* @author yzl
* @see [相关类/方法](可选)
* @since [产品/模块版本] (可选)
*/
public class FreemarkerTest {
public static void main(String[] args) throws IOException, TemplateException {
Reader reader = new FileReader(new File("E:/test.ftl"));
Template template = new Template("test", reader, null, "utf-8"); Map<Object, Object> data = new HashMap<Object, Object>();
data.put("userName", "hello world");
data.put("list", Arrays.asList("entity1","entity2"));
Writer writer = new PrintWriter(System.out); template.process(data, writer); writer.flush();
writer.close();
reader.close();
}
}

Ftl文件:

<p>姓名:${userName}</p>
<p>List:
<#list list as entity>
${entity}</br>
</#list>
</p>

输出结果:

<p>姓名:hello world</p>
<p>List:
entity1</br>
entity2</br>
</p>

解析Freemark字符串和ftl文件到字符串:

 package com.longge.util;

import java.io.File;
import java.io.FileReader;
import java.io.Reader;
import java.io.StringWriter;
import java.util.Map; import freemarker.template.Template;
import lombok.NonNull; /**
* @author roger yang
* @date 7/04/2019
*/
public class TemplateUtils {
/**
* parsing string
* @param toParseStr
* @param data
* @return
* @throws Exception
*/
public static String parsingString(@NonNull String toParseStr, @NonNull Map<String, Object> data) throws Exception {
try(StringWriter sw = new StringWriter();) {
Template template = new Template(toParseStr, toParseStr, null); template.process(data, sw);
sw.flush();
return sw.toString();
}
} /**
* parsing with ftl file
* @param file
* @param data
* @return
* @throws Exception
*/
public static String parsingFtlFile(@NonNull File file, @NonNull Map<String, Object> data) throws Exception {
try(Reader reader = new FileReader(file);
StringWriter sw = new StringWriter();) {
Template template = new Template(file.getName(), reader, null);
template.process(data, sw);
sw.flush();
return sw.toString();
}
} /**
* parsing with ftl file
* @param file
* @param data
* @return
* @throws Exception
*/
public static String parsingFtlFile(@NonNull String filePath, @NonNull Map<String, Object> data) throws Exception {
File file = new File(filePath);
return parsingFtlFile(file, data);
}
}

简单的freemarker解析测试的更多相关文章

  1. 非常简单的XML解析(SAX解析、pull解析)

    这里只是把解析的数据当日志打出来了 非常简单的xml解析方式 package com.example.demo.service; import java.io.IOException; import ...

  2. 自己动手实现一个简单的JSON解析器

    1. 背景 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.相对于另一种数据交换格式 XML,JSON 有着诸多优点.比如易读性更好,占用空间更少等.在 ...

  3. 一个简单的json解析器

    实现一个简单地json解析器. 两部分组成,词法分析.语法分析 词法分析 package com.mahuan.json; import java.util.LinkedList; import ja ...

  4. 基于 Roslyn 实现一个简单的条件解析引擎

    基于 Roslyn 实现一个简单的条件解析引擎 Intro 最近在做一个勋章的服务,我们想定义一些勋章的获取条件,满足条件之后就给用户颁发一个勋章,定义条件的时候会定义需要哪些参数,参数的类型,获取勋 ...

  5. 用c#自己实现一个简单的JSON解析器

    一.JSON格式介绍 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.相对于另一种数据交换格式 XML,JSON 有着很多优点.例如易读性更好,占用空间更 ...

  6. 简单sql字段解析器实现参考

    用例:有一段sql语句,我们需要从中截取出所有字段部分,以便进行后续的类型推断,请给出此解析方法. 想来很简单吧,因为 sql 中的字段列表,使用方式有限,比如 a as b, a, a b... 1 ...

  7. 简单的URL解析

    简单的URL解析,直接举例说明了 function getUrl(){ //如果存在则取到来后面的参数,注意,?不需要取出,substring从1开始,否则取""; var qs ...

  8. FFmpeg的HEVC解码器源码简单分析:解析器(Parser)部分

    ===================================================== HEVC源码分析文章列表: [解码 -libavcodec HEVC 解码器] FFmpeg ...

  9. FFmpeg的HEVC解码器源代码简单分析:解析器(Parser)部分

    ===================================================== HEVC源代码分析文章列表: [解码 -libavcodec HEVC 解码器] FFmpe ...

随机推荐

  1. my sql

    如果改了上面的4个配置文件,要让其立即生效,可以使用如下方法 source .bash_profile . .bash_profile 基于Apache+php+mysql的许愿墙网站的搭建 方案一: ...

  2. (二分)Block Towers(cf626)

    http://www.codeforces.com/contest/626/problem/C 题意是有一群小朋友在堆房子,现在有n个小孩每次可以放两个积木,m个小孩,每次可以放3个积木,最后每个小孩 ...

  3. Android--Notification

    1.通知(Notification)是应用程序没有运行在前台时可以向用户发出一些提示消息的功能,发出通知后,手机状态栏会显示通知,用户可以通过下拉状态栏来查看和操作通知: 2.Notification ...

  4. Troubleshoot Refused VNC Connection in CentOS 7

    Troubleshoot Refused VNC Connection in CentOS 7 Posted on March 15, 2015 by Istvan Szarka — 2 Commen ...

  5. extjs中form.reset(true)出现的bug修复

    在之前的开发extjs中,用ext.form.panel开发了一个表单,当使用了reset(true)之后,再次使用getRecord()却还是可以得到值,该值为上一次的旧值,查看了api文档,再结合 ...

  6. 【原创】 SharePoint Service Unavaliable

    HTTP Error 503. The service is unavailable. 一般都是application pool停止工作了,停止原因可能是Identiy里的账号过期了什么的.

  7. 用c#开发微信 (21) 微信酒店预订系统

    本系统主要是帮助酒店让客户可以通过微信预订房间,增加酒店的入住率. 1 微信里订酒店 1.1关注微信号 用微信扫描下面的二维码(微信号 webuscn),关注此微信号 1.2订房 点击微信号里的 微布 ...

  8. 100道.net面试题

    简述 private. protected. public. internal 修饰符的访问权限. 答 . private : 私有成员, 在类的内部才可以访问. protected : 保护成员,该 ...

  9. 基于 IdentityServer3 实现 OAuth 2.0 授权服务数据持久化

    最近花了一点时间,阅读了IdentityServer的源码,大致了解项目整体的抽象思维.面向对象的重要性; 生产环境如果要使用 IdentityServer3 ,主要涉及授权服务,资源服务的部署负载的 ...

  10. 设计模式之美:Adapter(适配器)

    索引 别名 意图 结构 参与者 适用性 效果 相关模式 实现 实现方式(一):简单直接的对象适配器. 实现方式(二):实现双向类适配器. 别名 包装器(Wrapper) 意图 将一个类的接口转换成客户 ...