按文件名对文件批量排序文件 - 将特定行转换为不同的POJO

时间:2016-06-30 20:20:34

标签: java spring spring-batch

我正在使用以下流程创建Spring Batch / Spring Boot项目:

  1. 它需要从目录中读取一个或多个文件(每个文件应在名为Archive的POJO中进行转换),为此我使用的是MultiResourceReader。但在开始阅读之前,它需要整理文件,以便按正确的顺序处理它们。
  2. 我正在使用Collections.sort之前使用过的实现,但在这里不适合它。是否有像Collections.sort这样的资源?

    1. 假设存档有4个寄存器。每个文件内容的模式是:
    2. 第一行 - 标题//第2行和第3行 - 实际信息//最后一行 - 预告片

      因此,程序需要读取第一行,例如将其转换为Header.class,并且应该对其他类型执行相同的操作。

      如果有人有任何建议我如何解决这种情况,我将不胜感激。如果需要进一步理解,将发布更多信息。

      提前致谢。

1 个答案:

答案 0 :(得分:0)

问题1。

创建自定义比较器。请参阅这个仅比较文件名的简单示例。

import org.springframework.core.io.FileSystemResource;

public class MyComparator implements java.util.Comparator {

    @Override
    public int compare(Object o1, Object o2) {
        FileSystemResource f1 = (FileSystemResource) o1;
        FileSystemResource f2 = (FileSystemResource) o2;
        //Compare the file names. Add any other custom logic here.
        return f1.getFilename().compareTo(f2.getFilename());
    }
}

然后将此Comparator作为MultiResourceItemReader中的属性包含。

<bean id="customComparator" class="MyComparator"/> 

<bean id="multiResourceReader"
    class=" org.springframework.batch.item.file.MultiResourceItemReader">
    <property name="resources" value="file:csv/inputs/sample-*.csv" />
    <property name="delegate" ref="flatFileItemReader" />
    <property name="comparator" ref="customComparator" />
</bean>

对于问题2,您需要使用ItemProcessor来转换行或使用特殊逻辑处理它。一个很好的例子是 - http://www.mkyong.com/spring-batch/spring-batch-hello-world-example/