Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 定义Freemarker EOL格式(\n而不是\r\n)_Java_Spring_Freemarker - Fatal编程技术网

Java 定义Freemarker EOL格式(\n而不是\r\n)

Java 定义Freemarker EOL格式(\n而不是\r\n),java,spring,freemarker,Java,Spring,Freemarker,在我的Spring应用程序中,我使用Freemarker生成导出文件—带有标题和循环的简单纯文本,以呈现项目列表 @Bean public freemarker.template.Configuration freemarkerConfiguration() throws IOException, TemplateException { return new FreeMarkerConfigurationFactoryBean().createConfiguration(); } //

在我的Spring应用程序中,我使用Freemarker生成导出文件—带有标题和循环的简单纯文本,以呈现项目列表

@Bean
public freemarker.template.Configuration freemarkerConfiguration() throws IOException, TemplateException {
    return new FreeMarkerConfigurationFactoryBean().createConfiguration();
}

// ...

Template template = getFreemarkerTemplate();
Writer fileWriter = getFileWriter(outputFile);

template.process(getExportData(), writer);

// flush and close writer, some additional business logic
我想将当前Windows\r\n CRLF的行尾格式设置为Unix\n LF

我确实试过但不喜欢或不起作用

使用记事本++手动转换.ftl文件EOL-我不想用很多编辑器处理我的源文件,还有IntelliJ Git插件正在将EOL转换为CRLF-即使我会修改此项,也不能保证我的队友会这样做,也可能在其他地方出现问题 在每一行的末尾添加${'\n'}-这只会污染我的代码,开发人员必须记住在模板更改时添加它
添加自2.3.29起,没有此类配置选项。FreeMarker只是按原样输出模板的静态文本部分。虽然你不喜欢这种方法,但我相信最好是在你交给FreeMarker的作者身上这样做。在大多数应用程序中,这样做的开销根本不重要

另一个避免运行时开销的选项是在封装另一个TemplateLoader的自定义TemplateLoader中执行相同的操作。然而,这种解决方案的问题是换行符有时来自模板之外,即数据模型,我认为用户也会期望这些换行符被规范化


因此,即使它是FreeMarker的核心功能,我想它也可能是,它可能会在运行时执行此操作,就像您可以使用自定义编写器一样。

为什么?您需要一个自定义编写器,它可以将任何更改的序列转换为Unix格式。仅为此目的编写自定义编写器听起来像是巨大的开销-在配置和模板中有许多不同的设置,包括编码-老实说,我希望更改EOL格式将是单行的,因为您已经提到了这一点,您可以这样捕获输出:……在此处生成内容。。。。当然,这比在传递给FreeMarker的Writer中进行过滤要糟糕得多。这很糟糕,但我能做什么:现在我决定在每行末尾添加${'\n'},因为对我来说,模板本身就是我想要生成数据的内容和方式的定义。但是如果我的ftl文件变得更复杂,或者我会有更多的ftl文件,我肯定会实现我自己的Writer。谢谢你的帮助@迪卡尼,不,自由标记人的职责不可能是处理行尾。这是一个用户的。我会拒绝任何公关这样做。这样的作者最多只能在Commons IO中登陆。