import java.io.StringWriter;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Properties;
import java.util.Set; import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.Velocity;
import org.apache.velocity.context.Context; public class VMRenderUtils { static public final String vmfileName = "email.vm";
static private final Properties p = new Properties();
static {
p.put("file.resource.loader.class",
"org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
Velocity.init(p);
} static public String render(String flag, String emailSubject, String emailHost,
String emailFrom, String emailPassword, Map<String, HashSet<String>> moduleInCharge) {
Template template = Velocity.getTemplate(vmfileName); StringBuilder moduleInChargeString = new StringBuilder(); Set<String> key = moduleInCharge.keySet();
for (Iterator<String> it = key.iterator(); it.hasNext();) {
String s = (String) it.next();
moduleInChargeString.append(s+"="+HashSetToString(moduleInCharge.get(s))+"\n");
} Context context = buildContext(flag, emailSubject, emailHost,
emailFrom, emailPassword, moduleInChargeString.toString());
StringWriter sw = new StringWriter();
template.merge(context, sw);
return sw.toString();
} static Context buildContext(String flag, String emailSubject, String emailHost,
String emailFrom, String emailPassword, String moduleInCharge) {
Context context = new VelocityContext();
context.put("flag", flag);
context.put("emailSubject", emailSubject);
context.put("emailHost", emailHost);
context.put("emailFrom", emailFrom);
context.put("emailPassword", emailPassword); context.put("moduleInCharge", moduleInCharge); return context;
} private static String HashSetToString(HashSet<String> hashSet) {
String result = "";
if(hashSet == null) {
return result;
} for(String at:hashSet) {
result += (at+",");
}
if(!isBlank(result)) {
result = result.substring(0,result.length()-1);
}
return result;
}
private static boolean isBlank(String value) {
if(value == null || "".equals(value)) {
return true;
}
return false;
}
}

email.vm文件

SUPER_ADMIN=huahuiyang@gmail.com

#whether to send email
LOL_EMAIL=${flag} #email subject
EMAIL_SUBJECT=${emailSubject}
EMAIL_HOST=${emailHost}
EMAIL_FROM=${emailFrom}
EMAIL_PASSWORD=${emailPassword} #send mail to....
${moduleInCharge}

java如何调用:

URL filePath = Thread.currentThread().getContextClassLoader().getResource("email.properties");
File file = new File(filePath.toString().substring(5));
FileWriter fw;
try {
fw = new FileWriter(file);
fw.write(configureFile);
fw.close();
} catch (IOException e) {
logger.warn("fail to update configure file email.properties");
}

volicity 模板类,java操作配置文件的更多相关文章

  1. Java中Properties类的操作配置文件

    知识学而不用,就等于没用,到真正用到的时 候还得重新再学.最近在看几款开源模拟器的源码,里面涉及到了很多关于Properties类的引用,由于Java已经好久没用了,而这些模拟器大多用 Java来写, ...

  2. 错误: 找不到或无法加载主类 java操作hbase出错

    用java操作hbase 利用maven引入hbase包后发现无法启动程序,然后网上说是包的冲突. 我引入了下面三个包然后程序就不能运行了. <dependency> <groupI ...

  3. java 操作配置文件 .properties

    package com.dms.common; import java.io.File; import java.io.FileInputStream; import java.io.FileNotF ...

  4. java操作redis集群配置[可配置密码]和工具类(比较好用)

    转: java操作redis集群配置[可配置密码]和工具类 java操作redis集群配置[可配置密码]和工具类     <dependency>   <groupId>red ...

  5. Spring-继承JdbcDaoSupport类后简化配置文件内容

    正常情况下,我们在实现类中想要晕用模板类需要在配置文件中注入连接池,再将连接池注入给模板类,然后在实现类中得到. <!-- 配置C3P0连接池 --> <bean id = &quo ...

  6. Spring中的JDBC模板类入门

    1.Spring框架中提供了很多持久层的模板类来简化编程,使用模板类编写程序会变的简单 2.提供了JDBC模板,Spring框架提供的 *JdbcTemplate类 3.Spring框架可以整合Hib ...

  7. java 操作zookeeper

    java 操作zookeeper(一) 首先要使用java操作zookeeper,zookeeper的javaclient 使我们更轻松的去对zookeeper进行各种操作,我们引入zookeeper ...

  8. Java中Properties类的操作

    知识学而不用,就等于没用,到真正用到的时候还得重新再学.最近在看几款开源模拟器的源码,里面涉及到了很多关于Properties类的引用,由于Java已经好久没用了,而这些模拟器大多用Java来写,外加 ...

  9. Java NIO Path接口和Files类配合操作文件

    Java NIO Path接口和Files类配合操作文件 @author ixenos Path接口 1.Path表示的是一个目录名序列,其后还可以跟着一个文件名,路径中第一个部件是根部件时就是绝对路 ...

随机推荐

  1. Cannot change version of project facet Dynamic Web Module to 3.0

    背景描述: 最近在开发项目时,老是报错说:Project is not Dynamic Web Module 3.0.右击项目选择属性进行修改时出现以下错误: 这让我很是恼火,后来终于找到了万能的解决 ...

  2. [Android Pro] CountDownTimer倒计时

    定时执行在一段时候后停止的倒计时,在倒计时执行过程中会在固定间隔时间得到通知(译者:触发onTick方法),下面的例子显示在一个文本框中显示一个30s倒计时: new CountdownTimer(3 ...

  3. IE11 的区别

    http://msdn.microsoft.com/zh-tw/visualc/bg182625

  4. 手机站点动态效果插件TouchSlide

    今天看到TouchSlide插件,觉得非常不错,关于使用情况请看demo,下载地址:http://www.superslide2.com/TouchSlide/downLoad.html

  5. Android的两种事件处理机制

    UI编程通常都会伴随事件处理,Android也不例外,它提供了两种方式的事件处理:基于回调的事件处理和基于监听器的事件处理. 对于基于监听器的事件处理而言,主要就是为Android界面组件绑定特定的事 ...

  6. 同一服务器配置DataGuard

    实验环境:1.虚拟机VMware Server 1.0.62.操作系统:ora10g@linux5 /home/oracle$ cat /etc/redhat-releaseRed Hat Enter ...

  7. android 入门-库的生成jar 和引用jar

    开发环境 1.eclipse 2.android studio 步骤 1.在eclipse 生成 jar包 2.在android studio 引用 jar包 实现步骤 1.在eclipse 创建一个 ...

  8. phpcms v9 wap内容页内容显示方法

    phpcms v9的wap手机门户的问题解决 默认的{$content}标签假如内容页一开始输入的不是html代码的话会出现调用不出来的情况,这里用{$rs['content']} 来调用则可以解决问 ...

  9. 获取当前IP地址,跳转到对应城市网站。

    index.php文件 1,通过获取当前IP地址, 2,调用新浪AIP,获取到当前城市. 3,将中文转换为拼音后跳转. <?php include './pinyin.php'; //获取当前i ...

  10. 注解:【有连接表的】Hibernate单向1->1关联

    Person与Address关联:单向1->1,[有连接表的] (使用较少!) Person.java package org.crazyit.app.domain; import javax. ...