java - Spring批量写入固定格式文件

标签 java string spring spring-batch

我有一个项目编写器,如下所示:

<beans:property name="lineAggregator">
<beans:bean class="org.springframework.batch.item.file.transform.FormatterLineAggregator">
        <beans:property name="fieldExtractor">
                <beans:bean class="org.springframework.batch.item.file.transform.BeanWrapperFieldExtractor">
                 <beans:property name="names" value="column1, column2, column3, column4 " /> 
                </beans:bean>
            </beans:property>

            <beans:property name="format" value="%-8s%-12s%-11s%-16s" /> 
        </beans:bean>
    </beans:property>

很明显,我正在将 4 列写入固定格式文件,列长度分别为 8、12、11 和 16。

但是,假设第 1 列字符串是 14 个字符而不是 8 个字符,则输出文件会通过将整行向前推来盲目地容纳所有 14 个字符。

THIS IS A TEST

Expecting: 
THIS IS COL2STARTS

Getting: 
THIS IS A TESTCOL2STARTS

如何避免这种情况?

是否应该截断剩余字符并只写入前 8 个字符?

我是否需要在代码中进行验证,以严格按照列的预期仅传递 8 个字符?

最佳答案

您必须设置精度和宽度。试试这个格式化字符串:

<beans:property name="format" value="%-8.8s%-12.12s%-11.11s%-16.16s" /> 

参见:FormatterLineAggregator , Formatter

关于java - Spring批量写入固定格式文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11139496/

相关文章:

java - 如何正确读取军用时差?

java - 允许斜杠的 JAX-RS @Path 与其他资源发生冲突

php 用中间的连字符组合变量

java - Spring Security 身份验证管理器问题

java - 无法部署我的 Web 应用程序(Spring MVC、Tomcat 服务器、Maven、IntelliJ)

java - 如何在java中将模式dd-MMM-yy的字符串日期值转换为模式dd/MM/yyyy的日期对象

java - 需要一个示例 - 使用 Microsoft Crypto API 解密 Java 中的字符串

java - 将类中的所有静态变量放入数组/列表

regex - FOR/F 不适用于批处理文件中的逗号分隔双引号字符串

java - StringBuffer 已过时?