如何使用Freemarker模板进程控制文件生成

How to control file generation using Freemarker template process

我正在使用 freemarker 模板生成文件。 ftl 模板有 java API 调用,当 java API 出现任何异常时,我想避免在模板处理之间写入文件。见下面代码

templateFileName --> freemarker template file name (.ftl file)
templateFilePath --> freemarker template file path (.ftl file)
outputFilePath --> output file path

FileTemplateLoader fileTemplateLoader = new FileTemplateLoader(new File(templateFilePath));

MultiTemplateLoader tmpltLoader = new MultiTemplateLoader(
    new TemplateLoader[] { fileTemplateLoader});



// Set to Configuration
freemarkerConfig.setTemplateLoader(tmpltLoader);
freemarkerConfig.setLogTemplateExceptions(false);
freemarkerConfig.setWrapUncheckedExceptions(true);
freemarkerConfig.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);
freemarkerConfig.setFallbackOnNullLoopVariable(false);

Template template =
    freemarkerConfig.getTemplate(templateFileName.substring(templateFileName.lastIndexOf('/') + 1, templateFileName.length()),
        StandardCharsets.ISO_8859_1.name());

// write output into a file:
try (FileWriter fileWriter = new FileWriter(new File(outputFilePath))) {
  template.process(input, fileWriter);
}
catch (TemplateException e) {
  new FileOutputStream(outputFilePath).close(); //This causes only the file empty. But i dont want to write the output file 
}  

你可以传递一个StringWriterTemplate.process,然后如果没有异常,将结果String写入文件。但是,请确保输出足够小以适合内存。否则写入一个临时文件,如果没有异常就移动到最后的地方。