【问题标题】:How To Split Based On a Custom Delimiter如何根据自定义分隔符进行拆分
【发布时间】:2021-06-17 14:28:33
【问题描述】:

我正在使用 spring 集成,想知道如何覆盖 @Splitter 组件的默认分隔符。我专门使用FileSplitter 组件。我的目标是通过入站文件适配器接收逗号分隔的文件,并使用逗号作为分隔符拆分该文件。如果我错了,请纠正我,但 @Splitter 组件默认基于 '\n' 拆分文件。以下是我目前的代码。

@Bean
@InboundChannelAdapter(value = "fileAdapterInCh" , poller = @Poller(fixedDelay = "1000"))
public MessageSource<File> fileReadingMessageSource() {
    log.info("Got a message from channel 'httpInputRequestCh' in fileReadingMessageSource");
    
    FileReadingMessageSource source = new FileReadingMessageSource();
    
    source.setAutoCreateDirectory(true);
    source.setDirectory(new File(inputFilePath));
    
    ChainFileListFilter<File> cflf = new ChainFileListFilter<>();
    cflf.addFilter(new LastModifiedFileListFilter(30));
    cflf.addFilter(new AcceptOnceFileListFilter<>());
    cflf.addFilter(new SimplePatternFileListFilter(fileExtention));
    
    
    source.setFilter(cflf);
    
    List<File> files = source.getScanner().listFiles(new File(inputFilePath));
    source.start();
    
    log.info("Listing all files found in '" + inputFilePath + "': " + files );
    return source;
}


@Bean
@Splitter(inputChannel = "fileAdapterInCh" )
public FileSplitter fileSplitter() {
    log.info("file adapter file splitter "  );
    FileSplitter fs = new FileSplitter();
    fs.setOutputChannelName("testing1");
    return fs;
}

编辑:

我是否应该使用 FileToStringTransformer 将 CSV 文件的内容转换为字符串,然后使用 DefaultMessageSplitter 组件,因为该类具有设置分隔符的方法?

【问题讨论】:

    标签: java spring-boot spring-integration


    【解决方案1】:

    FileSplitter 的重点是通过流的方式逐行读取文件。 既然您说您的文件是带有这些逗号的单行,那么我们无法分别从 FileSplitter 做任何事情。因为这就是BufferedReader 的工作方式。

    您可能会考虑不使用FileSplitter,而是将整个文件(而不是行)读入内存,然后使用带有逗号的DefaultMessageSplitter 作为delimiter 选项:

    /**
     * Set delimiters to use for tokenizing String values. The default is
     * <code>null</code> indicating that no tokenization should occur. If
     * delimiters are provided, they will be applied to any String payload.
     *
     * @param delimiters The delimiters.
     */
    public void setDelimiters(String delimiters)
    

    【讨论】:

      猜你喜欢
      • 2019-05-05
      • 2014-06-07
      • 1970-01-01
      • 2019-09-19
      • 2013-02-27
      • 2018-10-25
      • 2020-04-18
      • 2020-04-11
      • 1970-01-01
      相关资源
      最近更新 更多