动态文件生成器
使用
freemarker
模板引擎框架。开源免费,简单易用,灵活易拓展。
官方文档:https://freemarker.apache.org/docs/index.html
实现步骤:
①定义模板文件
后端模板文件MainTemplate.java.ftl
:
/**
* 输入模板(多数之和)
* @author ${author!''}
*/
public class MainTemplate {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
<#if loop>
while (scanner.hasNext()) {
</#if>
// 读取输入元素个数
int n = scanner.nextInt();
// 读取数组
int[] arr = new int[n];
for (int i = 0; i < n; i++) {
arr[i] = scanner.nextInt();
}
// 处理问题逻辑,根据需要进行输出
// 示例:计算数组元素的和
int sum = 0;
for (int num : arr) {
sum += num;
}
System.out.println("${outputText!'sum = '}" + sum);
<#if loop>
}
</#if>
scanner.close();
}
}
前端模板文件myweb.html.ftl
:
<!DOCTYPE html>
<html>
<head>
<title>${name}官网</title>
</head>
<body>
<h1>欢迎来到${name}官网</h1>
<ul>
<#-- 循环渲染导航条 -->
<#list menuItems as item>
<li><a href="${item.url}">${item.label}</a></li>
</#list>
</ul>
<#-- 底部版权信息(注释部分,不会被输出)-->
<footer>
${currentYear} ${name}官网. All rights reserved.
</footer>
</body>
</html>
②对指定模板文件进行文件读取
Template template = configuration.getTemplate("MainTemplate.java.ftl");
③创建数据模型
MainTemplateConfig mainTemplateConfig = new MainTemplateConfig();
mainTemplateConfig.setAuthor("yanghuahua");
mainTemplateConfig.setLoop(false);
mainTemplateConfig.setOutputText("求和结果:");
④生成文件
Writer out = new FileWriter("MainTemplate.java");
template.process(mainTemplateConfig , out);
其他:
pom.xml
文件引入依赖
<!-- 模板引擎: https://freemarker.apache.org/index.html -->
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.32</version>
</dependency>
完整代码
public class DynamicGenerator {
public static void main(String[] args) throws TemplateException, IOException {
String projectPath = System.getProperty("user.dir");
System.out.println(projectPath);
// 1、获取输入目录(源路径)
String inputPath = projectPath + File.separator + "src/main/resources/templates/MainTemplate.java.ftl";
// 2、获取输出目录
String outputPath = projectPath + File.separator + "MainTemplate.java";
// 3、设置 动态替换的 数据(对象)
MainTemplateConfig mainTemplateConfig = new MainTemplateConfig();
mainTemplateConfig.setAuthor("yanghua");
mainTemplateConfig.setLoop(false);
mainTemplateConfig.setOutputText("求和结果:");
// 4、调用 生成文件
doGenerate(inputPath, outputPath, mainTemplateConfig);
}
/**
* 生成文件
*
* @param inputPath 模板文件输入路径
* @param outputPath 输出路径
* @param model 数据模型
* @throws IOException
* @throws TemplateException
*/
public static void doGenerate(String inputPath, String outputPath, Object model) throws IOException, TemplateException {
// new 出 Configuration 对象,参数为 FreeMarker 版本号
Configuration configuration = new Configuration(Configuration.VERSION_2_3_32);
// 指定模板文件所在的路径
File templateDir = new File(inputPath).getParentFile();
configuration.setDirectoryForTemplateLoading(templateDir);
// 设置模板文件使用的字符集
configuration.setDefaultEncoding("utf-8");
// 1、创建模板对象,加载指定模板
String templateName = new File(inputPath).getName();
Template template = configuration.getTemplate(templateName);
// 2、创建数据模型
// MainTemplateConfig mainTemplateConfig = new MainTemplateConfig();
// mainTemplateConfig.setAuthor("yupi");
// mainTemplateConfig.setLoop(false);
// mainTemplateConfig.setOutputText("求和结果:");
// 3、生成
Writer out = new FileWriter(outputPath);
template.process(model, out);
// 生成文件后别忘了关闭哦
out.close();
}
}