freemarker-number-formatter

2020-04-29 14:40:28 浏览数 (2)

freemarker是一款工作在java环境中的模板引擎。

他的格式化功能尤为高效,接下来我们了解一下freemarker的格式化功能。

搭建环境

我们使用mavel来管理我们的包依赖,因此,只需在pom.xml中配置包依赖即可:

代码语言:javascript复制
<!-- https://mvnrepository.com/artifact/org.freemarker/freemarker -->
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.23</version>
        </dependency>

模板的使用

接下来,我们搭建一个可用的模板环境。

代码语言:javascript复制
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Map;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
public class FreemarkerUtil {
    /**
     * 获取模板
     * @param name
     * @return
     */
    public Template getTemplate(String name) {
        try {
            //通过Freemaker的Configuration读取相应的ftl
            Configuration cfg = new Configuration();
            //设定去哪里读取相应的ftl模板文件
            cfg.setClassForTemplateLoading(this.getClass(),"/");
            //在模板文件目录中找到名称为name的文件
            Template temp = cfg.getTemplate(name);
            return temp;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
    /**
     * 输出到控制台
     * @param name 模板文件名
     * @param root
     */
    public void print(String name,Map<String,Object> root) {
        try {
            //通过Template可以将模板文件输出到相应的流
            Template temp = this.getTemplate(name);
            temp.process(root, new PrintWriter(System.out));
        } catch (TemplateException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    /**
     * 输出到文件
     * @param name
     * @param root
     * @param outFile
     */
    public void fprint(String name,Map<String,
            Object> root,String outFile) {
        FileWriter out = null;
        try {
            //通过一个文件输出流,就可以写到相应的文件中
            out = new FileWriter(
                    new File(outFile));
            Template temp = this.getTemplate(name);
            temp.process(root, out);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (TemplateException e) {
            e.printStackTrace();
        } finally {
            try {
                if(out!=null) out.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

在resources文件夹中创建一个test.ftl。

格式化

代码语言:javascript复制
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/**
 * Created by gavin on 17-5-10.
 */
public class Main {
    static FreemarkerUtil fu;
    static Map<String,Object> root = null;


    public static void main(String[] args) {
        fu = new FreemarkerUtil();
        root = new HashMap<String,Object>();
        //1、创建数据模型
        Map<String,Object> root = new HashMap<String,Object>();
        //2、为数据模型添加值
        root.put("num", 1234567890.0987654321);
        root.put("date",new Date());
        //3、将数据模型和模板组合的数据输出到控制台
        fu.print("test.ftl", root);
    }
}

test.ftl:

代码语言:javascript复制
#{num}    <#--正常输出-->
${num}    <#--正常输出-->
${num?string} <#--格式化输出-->
${num?string.percent} <#--以百分比输出-->
${num?string.currency}<#--以当地金融符号输出-->

${num?string.$$}<#--在输出的字符串前加$$-->

${num?string["0.0"]}<#--至少保留一位小数和整数-->

${num?string["0000000000000000000000000000000000000.#"]}<#--有小数则只保留一位,整数部分位数少了用0添齐-->

${num?string["################################.#"]}<#--有小数则只保留一位,最多保留#数量的整数-->

${num?string(',###.00')}<#--保留至少两位小数,整数增加千分位-->


${num?string(",##0.0#")}<#--有小数则至少保留1位,最多2位,至少保留一位整数,整数以千分位分割。这个经常会用到,用以展示金钱等-->

${num?string(",##0.00%")}<#--小数至少保留2位,至少保留一位整数,整数以千分位分割,末尾增加%。这个经常会用到,用于展示百分比-->

${(num?string(",##0.0#"))!"error"}<#--同上,如果num为null则展示error-->


${date?string("yyyy-MM-dd HH:mm:ss zzzz")}<#--格式化日期-->

运行main函数即可看到效果。

0 人点赞