本文主要是介绍freemarker 模板生成 文件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
最近公司比较忙,好久没写文章了,今天来一篇。
要生成的目标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-modelroot.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(); } }
这篇关于freemarker 模板生成 文件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!