1. velocity
    1. 初始化
      1. 三种方法
        1. 1,加载classpath目录下的vm文件
        2. 2,根据绝对路径加载
        3. 3,使用文本文件
    2. 设置模板变量信息
    3. 输出文件

velocity

初始化

三种方法

1,加载classpath目录下的vm文件

public void initVelocity() {
        Properties p = new Properties();
        try {
            // 加载classpath目录下的vm文件
            p.setProperty("file.resource.loader.class",
            "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
            // 定义字符集
            p.setProperty(Velocity.ENCODING_DEFAULT, "UTF-8");
            p.setProperty(Velocity.OUTPUT_ENCODING,"UTF-8");
            // 初始化Velocity引擎,指定配置Properties
            Velocity.init(p);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

2,根据绝对路径加载

Properties p = new Properties();
// 初始化默认加载路径为:D:/template
p.setProperty(VelocityEngine.FILE_RESOURCE_LOADER_PATH, "D:/template")
    p.setProperty(Velocity.ENCODING_DEFAULT, "UTF-8");
p.setProperty(Velocity.OUTPUT_ENCODING, "UTF-8");
// 初始化Velocity引擎,init对引擎VelocityEngine配置了一组默认的参数 
Velocity.init(p);

3,使用文本文件

首先定义一个velocity.properties文件

input.encoding = UTF-8
file.resource.loader.class=org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader
然后,已流的形式加载该文件

Properties p = new Properties();
// 加载properties文件
p.load(this.getClass().getResourceAsStream("/velocity.properties"));
// 初始化Velocity引擎,init对引擎VelocityEngine配置了一组默认的参数 
Velocity.init(p);

设置模板变量信息

VelocityContext velocityContext = new VelocityContext();
velocityContext.put("模板的key", "填充的值");

案例

    /***
     * 设置模板变量信息,通过反射来
     * @return VelocityContext
     */
    public VelocityContext prepareContext(Object clas) {

        VelocityContext velocityContext = new VelocityContext();
        //获取类的字段属性
        Field[] fields = clas.getClass().getDeclaredFields();
        //获取类的父类字段属性
        Field[] declaredFields = clas.getClass().getSuperclass().getDeclaredFields();

        // 创建一个新数组,合并两个数组
        Field[] mergedArray = new Field[fields.length + declaredFields.length];
        System.arraycopy(fields, 0, mergedArray, 0, fields.length);
        System.arraycopy(declaredFields, 0, mergedArray, fields.length, declaredFields.length);

        //循环遍历put到velocityContext中
        for (Field field : mergedArray) {
            field.setAccessible(true); // 使私有字段也可以访问
            try {
                Object value = field.get(clas);
                System.out.println("velocityContext.put ===> "+field.getName() + " = " + value);
                velocityContext.put(field.getName(), value);
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        }
        return velocityContext;
    }

输出文件

//获取模板
Template tpl = Velocity.getTemplate("/templates/java/aaa.java.vm", "UTF-8");
StringWriter sw = new StringWriter();
//合并输出道sw上
tpl.merge(velocityContext, sw);
//写入文件
FileUtils.writeStringToFile(new File("文件路径"), sw.toString(), "UTF-8");

日夜颠倒头发少 ,单纯好骗恋爱脑 ,会背九九乘法表 ,下雨只会往家跑 ,搭讪只会说你好 ---- 2050781802@qq.com

×

喜欢就点赞,疼爱就打赏

相册 说点什么