如何根据自定义分隔符拆分

How To Split Based On a Custom Delimiter

我正在使用 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 组件,因为 class 有设置分隔符的方法?

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)