import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.VelocityEngine;
import org.apache.velocity.runtime.RuntimeConstants;
import org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Properties;

public class VelocityGenerator {
    protected VelocityEngine ve;

    /**
     * 准备velocity引擎
     */
    public void init() {
        ve = new VelocityEngine();
        ve.setProperty(RuntimeConstants.RESOURCE_LOADER, "classpath");
        ve.setProperty("classpath.resource.loader.class", ClasspathResourceLoader.class.getName());
        ve.init();
    }

    /**
     * @param entity
     * @param fileName /var/html/ xxx.html
     * @throws IOException
     */
    public void buildFileByTemplate(EntityObject entity, String fileName, String filePath) throws IOException {
        //添加数据
        VelocityContext ctx = new VelocityContext();
        ctx.put("entity", entity);
        //取得模板文件
        Template domainModelTemplateA = ve.getTemplate("a_news.vm", "utf-8");
        String outputPath = filePath + File.separator + "a_" + fileName;
        //渲染并保存文件
        render(domainModelTemplateA, ctx, outputPath);
        outputPath = filePath + File.separator + "ot_" + fileName;
        render(domainModelTemplateOt, ctx, outputPath);
    }


    /**
     * 渲染
     *
     * @param template
     * @param ctx
     * @param file
     */
    protected void render(Template template, VelocityContext ctx, String file) {
        File out = new File(file);
        FileWriter writer = null;
        try {
            //如果路径不存在,创建路径
            out.getParentFile().mkdirs();
            writer = new FileWriter(out);
            //渲染
            template.merge(ctx, writer);
            writer.flush();

        } catch (IOException e) {
            logger.error("文件生成失败", e);
        } finally {
            try {
                writer.close();
            } catch (IOException e) {
                logger.error("文件流关闭失败", e);
            }
        }
    }

//    public static void main(String[] args) throws IOException {
//        VelocityGenerator velocityGenerator = new VelocityGenerator();
//        velocityGenerator.init();
//        EntityObject entityObject = new EntityObject();
//        entityObject.setBody("51博客.");
//        entityObject.setTitle("VelocityEngine使用");
//        velocityGenerator.buildFileByTemplate(entityObject, "xxx.html", "/var");
//    }


}
public class EntityObject {

    private String title;

    private String author;

    private String body;

    public String getBody() {
        return body;
    }

    public void setBody(String body) {
        this.body = body;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }
}


a_news.vm

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <meta name="keywords" content="your keywords">
  <meta name="description" content="your description">
  <meta name="author" content="author,email address">
  <meta name="viewport"
        content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
  <meta name="apple-mobile-web-app-capable" content="yes">
  <meta name="apple-mobile-web-app-status-bar-style" content="black">
  <meta name="format-detection" content="telephone=no,email=no">
  <title>VelocityEngine使用</title>
  <!-- build:css static/css/act.css -->
  <link rel="stylesheet" href="/static/css/core.css">
  <link rel="stylesheet" href="/static/css/head.css">
  <link rel="stylesheet" href="/static/css/icon.css">
  <link rel="stylesheet" href="/static/css/otnews.css">
  <!-- endbuild -->
</head>
<body>

  <!--内容区域-->
  <div class="service_txt">
      ${entity.body}
  </div>


<!-- build:js static/js/act.js -->
<script src="/static/js/lib/zepto.min.js"></script>
<script src="/static/js/app_download.js"></script>
<!-- endbuild -->
</body>
</html>