之前说的文件都是静态文件,也就是不需要进行调整的,写死的固定的代码,直接进行拷贝就可以了;
动态文件的需求:我们使用这个ACM作为案例,如果想把这个文件作为这个动态的文件,我们应该如何去理解这个动态文件:
以下面的这个模版作为样例,我们的动态文件就是说的:
1)如果我们想要灵活的控制这个文件前面的注释的相关的信息(例如我们在这个代码的第四行添加这个author的相关的信息,并且进行这个灵活的调整,这个时候我们应该如何去做;
2)我们的这个现有的模版里面是有这个while循环读取的,我们我们想要灵活的控制(即有的时候我们想要灵活的读取,但是有的时候我们不需要,这个应该如何去进行处理);
3)我们的输出的内容是sum=具体值,我们想要替换这个输出的格式:例如修改成这个target=()之类的,这个又应该如何处理;
以上的这些问题,都需要我们灵活的进行处理,而不是单纯的进行这个静态文件的拷贝和复制,这样的类型的文件,我们称为动态文件;
我们的一个通俗的想法就是挖坑:就是在我们想要进行调整的地方挖坑,并且我们不断的对于这个坑进行填充,但是我们这个项目使用的是freemarker这个模版引擎帮助我们快读的生成这个对应的文件,相当于就是我们把这个模版和想要修改的地方指出来,我们的这个freemarker可以直接进行处理,对于我们的这个模版进行动态的调整;
使用模版引擎,我们不用去写这个挖坑的逻辑,而是让这个freemarker进行处理,我们只需要把这个数据和模版内容给他就可以了,他就可以我们的这个数据填进去生成新的内容;
模版引擎:定义挖坑规则,让开发者向坑里面填数据,就可以生成这个对应的内容,下面的这个就是我们的这个模版引擎的这个功能说明;
我们知道下面的这些关于freemarker内容,就可以满足我们的这个项目的需求即可:
下面就是我们在我们自己的这个项目的目录下面新建这个resource里面的这个web.html文件,后缀是ftl,这个html是我们的这个文件的名字,ftl就是我们的这个模版引擎的一个语法,暂时可以这么进行理解;
下面的这个就是对于这个模版代码进行说明:
这个实际上就是html的格式:双标签,主体部分,无序列表,这些都是我们的这个html里面基本的语法;
1)在我们的这个ul无序列表里面,可以看到两个坑:一个就是这个href里面的这个参数需要我们去进行填充,然后就是这个label也是需要我们自己填充的;
2)在这个第16行里面,我们就需要去对于这个currentyear,也就是目前的年份进行填充,只是这个模版引擎里面的这个语法稍有区别于我们的html,例如这个里面出现的这个#双标签,以及这个注释14行内容时候的这个注解的写法,我们的html使用的是!,这个地方用的是#;
3)需要注意的是这个里面的遍历循环操作:这个10行的list就是个列表,名字是menuitems,这个里面的每一个元素都是item,因此这个类似于我们的c++里面的这个范围for的写法,对于这个数据结构里面的内容进行遍历的操作;
上面的这个就是我们的模版,里面的这个坑都是挖好的,需要我们去填充数据:下面的这个就是json类型的数据,我们把下面的称之为数据模型;
{
"currentYear": 2023,
"menuItems": [
{
"url": "https://codefather.cn",
"label": "编程导航",
},
{
"url": "https://laoyujianli.com",
"label": "老鱼简历",
}
]
}
我们的这个数据模型和上面的模版组合就是我们想要结果,如果进行修改,直接修改我们的这个数据模型里面的对应的内容即可;
下面的这个就是我们需要进行引入的这个依赖,依赖引入之后是全部需要进行刷新操作的;
配置对象里面的第一行指定我们的这个引擎的版本号和我们的合格pomxml文件里面的这个是配对的;
然后就是指定我们的这个模版在的文件夹,即我们的resource下面的这个template里面的这个文件就是我们哇好坑的这个文件(模版文件);
指定的时候指定的是我们的这个模版文件所在的这个文件夹的路径,但是我们想要去加载这个指定的模版,这个时候的参数就是我们的这个模版ftl文件的名字;
下面的就是向我们的这个模版文件里面去填入内容,这个内容和我们的模版文件在这个freemarker作用下,就会产生我们想要的这个内容;
下面这个就是利用我们的这个java里面的集合类,把这个对应的魔板里面需要的参数(href和我们的这个label标签放进去即可);
这个地址就是我们的这个生成的文件的地址:我们使用的就是这个new filewriter的方法,这个方法里面的参数就是我们的文件的名字;
下面的这个就是调用这个process方法运行我们的程序,然后就是去关闭资源即可,我们可以在这个target目录下面看到生成的这个文件的相关内容;
我们可以看到这个地方的年份,2023使用的是三个一组进行分割的写法,如果我们想要把这个逗号去掉,这个时候我们可以使用这个官方文档里面的方法进行解决;
其实这个在我们的在官方文档里面是有这个对应的解决的方案:就是设定我们的这个数据的生成的格式,如图所示;
[外链图片转存中…(img-me3unnGk-1734830426098)]
实际上这个官方文档里面的这个cfg就是我们的这个文件里面定义的这个confihration的这和缩写形式:我们在这个代码里面稍微进行调整就可以了;
这个时候我们再去检查这个html文件,就会发现这个里面显示的这个2023的逗号就消失了;
的这和缩写形式:我们在这个代码里面稍微进行调整就可以了;
这个时候我们再去检查这个html文件,就会发现这个里面显示的这个2023的逗号就消失了;