简单的freemarker解析测试
本文是一个很简单很基础的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解析测试的更多相关文章
- 非常简单的XML解析(SAX解析、pull解析)
这里只是把解析的数据当日志打出来了 非常简单的xml解析方式 package com.example.demo.service; import java.io.IOException; import ...
- 自己动手实现一个简单的JSON解析器
1. 背景 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.相对于另一种数据交换格式 XML,JSON 有着诸多优点.比如易读性更好,占用空间更少等.在 ...
- 一个简单的json解析器
实现一个简单地json解析器. 两部分组成,词法分析.语法分析 词法分析 package com.mahuan.json; import java.util.LinkedList; import ja ...
- 基于 Roslyn 实现一个简单的条件解析引擎
基于 Roslyn 实现一个简单的条件解析引擎 Intro 最近在做一个勋章的服务,我们想定义一些勋章的获取条件,满足条件之后就给用户颁发一个勋章,定义条件的时候会定义需要哪些参数,参数的类型,获取勋 ...
- 用c#自己实现一个简单的JSON解析器
一.JSON格式介绍 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.相对于另一种数据交换格式 XML,JSON 有着很多优点.例如易读性更好,占用空间更 ...
- 简单sql字段解析器实现参考
用例:有一段sql语句,我们需要从中截取出所有字段部分,以便进行后续的类型推断,请给出此解析方法. 想来很简单吧,因为 sql 中的字段列表,使用方式有限,比如 a as b, a, a b... 1 ...
- 简单的URL解析
简单的URL解析,直接举例说明了 function getUrl(){ //如果存在则取到来后面的参数,注意,?不需要取出,substring从1开始,否则取""; var qs ...
- FFmpeg的HEVC解码器源码简单分析:解析器(Parser)部分
===================================================== HEVC源码分析文章列表: [解码 -libavcodec HEVC 解码器] FFmpeg ...
- FFmpeg的HEVC解码器源代码简单分析:解析器(Parser)部分
===================================================== HEVC源代码分析文章列表: [解码 -libavcodec HEVC 解码器] FFmpe ...
随机推荐
- JavaScript知识架构学习路径(一)- 变量篇
[摘要]本文是专为JavaScript入门者而总结的,总体上将JavaScript的基础部分分成了九大块,分别是变量.运算符.数组.流程控制结构.字符串函数.函数基础.DOM操作基础.文档对象模型DO ...
- 【转载】我也说 IEnumerable,ICollection,IList,List之间的区别
做C#的同学们,都知道,一类只能有一个继承类,但可以实现多个接口.这句话就告诉我们:IEnumerable,ICollection,IList,List区别了 首先我看看 IEnumerable: / ...
- C#设计模式总结
一.引言 经过这段时间对设计模式的学习,自己的感触还是很多的,因为我现在在写代码的时候,经常会想想这里能不能用什么设计模式来进行重构.所以,学完设计模式之后,感觉它会慢慢地影响到你写代码的思维方式.这 ...
- [Hyper-V]制作一个干净的操作系统模板
描述: 在Hyper-V里创建虚拟机的时候,我们可以先来创建一个干净的操作系统,将其制作为操作系统模板,该虚拟机的磁盘文件也将被视作基础磁盘以方便基于它创建差异化磁盘 安装其它虚拟机的时候就可以差异化 ...
- RabbitMQ(三) -- Publish/Subscribe
RabbitMQ(三) -- Publish/Subscribe `rabbitmq`支持一对多的模式,一般称为发布/订阅.也就是说,生产者产生一条消息后,`rabbitmq`会把该消息分发给所有的消 ...
- memcached与.NET的融合使用(二)
memcached部署完成之后,对当前缓存中数据的监控就显得比较迫切,这里看到网上开源的memadmin比较小巧好用,决定用它来查看监控memcached. 下载memadmin1.0.11,地址:h ...
- Spirng quartz 整合
以下是资料来源: quartz maven confighttp://quartz-scheduler.org/downloads Spring 定时器(Timer,Quartz)http://sup ...
- Artificial Intelligence Language
Artificial Intelligence Language Objective We know, a true AI program should have ability to underst ...
- atitit.解决struts2 SpringObjectFactory.getClassInstance NullPointerException
atitit.解决struts2 SpringObjectFactory.getClassInstance NullPointerException #--现象 java.lang.NullPoint ...
- python redis使用
#!/usr/bin/python #coding=utf-8 import redis class CRedis: def __init__(self): self.host = 'localhos ...