You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Batch配置类路径CSV资源报FlatFileParseException错误如何解决

类路径CSV资源的正确配置方式

你现有代码中ClassPathResource("result-match-metadata.csv")的路径配置本身是正确的,只要满足以下两个前提即可正常加载资源:

  • CSV文件存放于项目src/main/resources根目录下;如果存放在resources的子目录中,比如src/main/resources/data/,路径需对应修改为ClassPathResource("data/result-match-metadata.csv")
  • 确认项目构建工具(Maven/Gradle)的配置没有排除.csv后缀的资源文件,构建完成后检查target/classes(Maven项目)或build/resources/main(Gradle项目)目录下存在该CSV文件即可。
你当前报错的根因与修复方案

你遇到的FlatFileParseException不是资源路径错误导致的:从报错信息可以看出Spring已经成功定位到了目标CSV文件,错误原因是CSV列分隔符配置不匹配,且没有跳过表头行。
从报错输出的第一行内容可以看到,你的CSV文件列之间是用制表符(Tab)/多空格分隔的,但你代码中调用.delimited()时使用了默认的逗号作为分隔符,无法正确拆分列,同时你没有跳过表头行,会把表头当做数据行解析,触发类型不匹配异常。

修复后的reader配置如下:

@Bean
fun reader(): FlatFileItemReader<MatchInput> {
    return FlatFileItemReaderBuilder<MatchInput>()
        .name("MatchItemReader")
        .resource(ClassPathResource("result-match-metadata.csv"))
        // 指定CSV使用的分隔符,如果是多空格分隔就替换成对应的多空格字符串
        .delimited().delimiter("\t")
        // 跳过第一行表头
        .linesToSkip(1)
        .names(*FIELD_NAMES)
        .fieldSetMapper(object : BeanWrapperFieldSetMapper<MatchInput>() {
            init {
                setTargetType(MatchInput::class.java)
            }
        })
        .build()
}

内容的提问来源于stack exchange,提问作者Mama

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 23:12:04