freemarker模板文件数据下载文件

pom.xml引入freemarker包:

<!--freemarker模板-->
<dependency>
    <groupId>org.freemarker</groupId>
    <artifactId>freemarker-gae</artifactId>
    <version>2.3.28</version>
</dependency>

在resources下创建template文件夹,再创建ResultCodeEnum.ftl模板文件

在这里插入图片描述

模板文件内容:

package com.yaoyanshe.common.result.code.common.constant;

public enum ResultCodeEnum {

<#if enumList?exists>
<#list enumList as enum>
    ${enum.enumName}("${enum.code}","${enum.codeName}")<#if enum_index == ((enumList?size) - 1)>;<#else >,</#if>
</#list>
</#if>


    /**
    * The code.
    */
    private String code;

    /**
    * The message.
    */
    private String msg;

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    /**
    * Instantiates a new error detail.
    *
    * @param code the code
    * @param msg  the message
    */
    private ResultCodeEnum(String code, String msg) {
        this.code = code;
        this.msg = msg;
    }

    /**
    * Resolve.
    *
    * @param code the code
    * @return the error detail
    */
    public static ResultCodeEnum resolve(String code) {
    for (ResultCodeEnum item : values()) {
        if (item.code.equalsIgnoreCase(code)){
            return item;
        }
    }
    return null;
}

}

模板写入数据

private void initEnumFile(List<CommonResultCode> list, File mapperFile){
	Configuration cfg = new Configuration(Configuration.VERSION_2_3_22);
	//freemarker 模板的名字
	final String templateName = "ResultCodeEnum.ftl";
	//这个/template是在我们resources目录下的一个文件夹名,然后吧模板类EnumClass.ftl放在这个文件夹下面就好
	cfg.setClassForTemplateLoading(this.getClass(),"/template");
	cfg.setDefaultEncoding("UTF-8");
	cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);
	try{
	  Template template = cfg.getTemplate(templateName);
	  FileOutputStream fos = new FileOutputStream(mapperFile);
	  Writer out = new BufferedWriter(new OutputStreamWriter(fos, "utf-8"),10240);
	  //这个map里面,我就存储的就是需要传到模板类“ResultCodeEnum.ftl”,里面生成枚举的数据
	  Map<String,Object> dataMap = new HashMap<>();
	  dataMap.put("enumList", list);
	  template.process(dataMap,out);
	}catch (Exception e){
	  CustomLoggerUtil.printErrorLog(this.getClass(),"downloadEnumFile-下载全部文件失败,错误信息=[{}]",e);
	}
}

下载文件

String path = this.getClass().getResource("").getPath()+"/ResultCodeEnum.java";
File file = new File(path);
List<FindResultCodeResponse> list = resultCodeMapper.getResultCodes(request);
if(CollectionUtils.isEmpty(list)){
      return;
}
initEnum(list, file);
// 取得文件名。
String filename = file.getName();
// 以流的形式下载文件。
InputStream fis = new BufferedInputStream(new FileInputStream(file));
byte[] buffer = new byte[fis.available()];
fis.read(buffer);
fis.close();
// 清空response
response.reset();
// 设置response的Header
response.addHeader("Content-Disposition", "attachment;filename=" + filename+".java");
response.addHeader("Content-Length", "" + file.length());
OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
toClient.write(buffer);
toClient.flush();
toClient.close();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值