如何使用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
}
你可以传递一个StringWriter
给Template.process
,然后如果没有异常,将结果String
写入文件。但是,请确保输出足够小以适合内存。否则写入一个临时文件,如果没有异常就移动到最后的地方。
我正在使用 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
}
你可以传递一个StringWriter
给Template.process
,然后如果没有异常,将结果String
写入文件。但是,请确保输出足够小以适合内存。否则写入一个临时文件,如果没有异常就移动到最后的地方。