JAVA集成velocity实现对已有模板替换(占位符变量)替换
平时我们如果有一些简单的模板替换需求,比如有个txt文件,或者代码生成模板文件 要根据传入的变量替换成具体的值 就可以使用这个框架
如果是太复杂的 比如替换word模板这种的,可以使用freemaker,参考:https://www.cnblogs.com/pxblog/p/12790904.html
依赖
<dependency> <groupId>org.apache.velocity</groupId> <artifactId>velocity-engine-core</artifactId> <version>2.0</version> </dependency>
把模板文件放在resource底下 ,命名改成以.vm结尾
template.txt.vm 内容如下
{name},你好
java类
VelocityInitializer.java
import org.apache.velocity.app.Velocity; import java.util.Properties; /** * VelocityEngine工厂 */ public class VelocityInitializer { /** * 初始化vm方法 */ public static void initVelocity() { Properties p = new Properties(); try { // 加载classpath目录下的vm文件 p.setProperty("file.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader"); // 定义字符集 p.setProperty("input.encoding", "UTF-8"); p.setProperty("output.encoding", "UTF-8"); // 初始化Velocity引擎,指定配置Properties Velocity.init(p); } catch (Exception e) { throw new RuntimeException(e); } } }
使用方式
import org.apache.velocity.Template; import org.apache.velocity.VelocityContext; import org.apache.velocity.app.Velocity; import java.io.StringWriter; public class VelocityUtils { /** * 设置模板变量信息 * * @param name 模板的变量值,这里也可以传对象 传对象的话 模板就需要使用${对象名.属性名} * @return */ public static VelocityContext prepareContext(String name) { VelocityContext velocityContext = new VelocityContext(); velocityContext.put("name", name); return velocityContext; } /** * 生成模板,使用方式 * * @param name * @return */ public static void generateTemplate(String name) { VelocityInitializer.initVelocity(); //设置模板数据 VelocityContext context = prepareContext(name); StringWriter sw = new StringWriter(); //这里是模板存放的路径,如果是resource底下,直接这样写就可以 Template tpl = Velocity.getTemplate("template.txt.vm", "UTF-8"); //填充模板数据 tpl.merge(context, sw); //这个就是变量替换后的模板内容,可以根据自己需求增加后面逻辑 String template = sw.toString(); } }
velocity一些语法
遍历,判断遍历是不是最后一个元素,不是加","
#foreach($url in $urls) "${url}"#if($foreach.count != $urls.size()),#end #end
-----------------------有任何问题可以在评论区评论,也可以私信我,我看到的话会进行回复,欢迎大家指教------------------------
(蓝奏云官网有些地址失效了,需要把请求地址lanzous改成lanzoux才可以)