最近公司比较忙,好久没写文章了,今天来一篇。
要生成的目标java文件
package com.cs.qdog.swift.objects;
public class F32B {
private Double amount;
private String currency;
public Double getAmount() {
return amount;
}
public void setAmount(Double amount) {
this.amount = amount;
}
public String getCurrency() {
return currency;
}
public void setCurrency(String currency) {
this.currency = currency;
}
}
模板文件SwiftFieldClass.txt(可以是任意格式的文件)
package com.cs.qdog.swift.objects;
public class ${class} {
<#list properties as prop>
private ${prop.type} ${prop.name};
</#list>
<#list properties as prop>
public ${prop.type} get${prop.name?cap_first}(){
return ${prop.name};
}
public void set${prop.name?cap_first}(${prop.type} ${prop.name}){
this.${prop.name} = ${prop.name};
}
</#list>
}
java 代码
package com.cs.qdog.swift.objects;
import java.io.File;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import freemarker.template.Configuration;
import freemarker.template.DefaultObjectWrapper;
import freemarker.template.Template;
import freemarker.template.TemplateException;
public class GenObjects {
public static void main(String[] args) throws IOException,
TemplateException {
/* ------------------------------------------------------------------- */
/* You usually do it only once in the whole application life-cycle: */
/* Create and adjust the configuration */
Configuration cfg = new Configuration();
cfg.setDirectoryForTemplateLoading(new File(
"D:/Temp/EclipseWorkSpace/GenSwiftFields/templates")); //模板父路径
cfg.setObjectWrapper(new DefaultObjectWrapper());
/* ------------------------------------------------------------------- */
/* You usually do these for many times in the application life-cycle: */
/* Get or create a template */
Template temp = cfg.getTemplate("SwiftFieldClass."); //模板文件,相对于setDirectoryForTemplateLoading设置的路径
/* Create a data-model */
Map<String, Object> root = new HashMap<String, Object>(); //注意必须有一个根结点 data-model
root.put("class", "F32B");
Collection<Map<String, String>> properties = new HashSet<Map<String, String>>();
root.put("properties", properties);
/* subfield 1: currency */
Map<String, String> currency = new HashMap<String, String>();
currency.put("name", "currency");
currency.put("type", "String");
properties.add(currency);
/* subfield 2: amount */
Map<String, String> amount = new HashMap<String, String>();
amount.put("name", "amount");
amount.put("type", "Double");
properties.add(amount);
/* Merge data-model with template */
String targetPath="***";//生成的目标文件的父目录
String targetFile="****";//生成目标文件的名字
if (!targetPath.exists())
targetPath.mkdirs();
File targetFile = new File(targetBasePath,targetFileName);
if (!targetFile.exists())
targetFile.createNewFile();
Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(targetFile), "UTF-8"));
temp.process(root, out);
out.flush();
}
}