解析CSV格式文件java

本文介绍了一个用于解析CSV文件并将其数据导入系统的Java服务实现。该服务利用了CsvToBean库来处理CSV数据,并通过自定义过滤器来清理异常字符及选择性地允许特定条件的行进入后续的数据处理流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

@Slf4j
public class CsvUtil {
    public static <T> List<T> getCsvData(MultipartFile file, Class<T> clazz, CsvToBeanFilter filter) {
        InputStreamReader in = null;
        try {
            in = new InputStreamReader(file.getInputStream(), "gbk");
        } catch (Exception e) {
            log.error("读取csv文件失败!");
        }
        //HeaderColumnNameMappingStrategy<T> strategy = new HeaderColumnNameMappingStrategy<>();
        //strategy.setType(clazz);

        CsvToBean<T> csvToBean = new CsvToBeanBuilder<T>(in)
                .withQuoteChar('\'')
//                .withMappingStrategy(strategy)
                .withSeparator(',')
                .withIgnoreQuotations(true)
                .withType(clazz)
                .withFilter(filter)
                .build();


        return csvToBean.parse();
    }
}

//过滤器

public class MyCsvToBeanFilter implements CsvToBeanFilter {
    @Override
    public boolean allowLine(String[] line) {

        //去掉 异常字符
        for (int index = 0; index < line.length; index++) {
            Pattern p = Pattern.compile("\\t|^\"|\"$");// 正则表达式匹配
            Matcher m = p.matcher(line[index]);
            String dest = m.replaceAll("");
            line[index] = dest;
            if (index == 1 && "是".equals(dest)) {
                return true;
            }
        }
        return false;
    }
}

service
public void import(MultipartFile file) {
  MyCsvToBeanFilter filter = new MyCsvToBeanFilter();
  List<Basic> basics= CsvUtil.getCsvData(file, Basic.class, filter);
  //业务代码
}

controller
@PostMapping("/import")
@ApiOperation(value = "导入")
public void gwBulkImport(MultipartFile file) {
    service.import(file);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值