Java解析csv文件并转成bean对象

本文介绍了一种利用Java和OpenCSV库实现的CSV文件解析工具。该工具支持两种解析方式:一种是根据列名进行解析;另一种是根据列的位置进行解析。通过实例展示了如何使用这些工具将CSV数据转换为Java Bean对象。

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

为了批量导入数据,采用了csv文件存储数据,后端写csv解析工具对数据进行读取和解析并导入数据库。
pom依赖:

<!-- csv文件解析依赖 -->
<dependency>
    <groupId>com.opencsv</groupId>
    <artifactId>opencsv</artifactId>
    <version>4.3.2</version>
</dependency>

一、解析csv文件工具类(根据列的名称)

package com.lxk.utils;

import com.opencsv.bean.CsvToBean;
import com.opencsv.bean.CsvToBeanBuilder;
import com.opencsv.bean.HeaderColumnNameMappingStrategy;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.multipart.MultipartFile;

import java.io.InputStreamReader;
import java.util.List;


@Slf4j
public class CsvUtil {
    /**
     * 解析csv文件并转成bean
     * @param file csv文件
     * @param clazz 类
     * @param <T> 泛型
     * @return 泛型bean集合
     */
    public static <T> List<T> getCsvData(MultipartFile file, Class<T> clazz) {
        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)
                .withSeparator(',')
                .withQuoteChar('\'')
                .withMappingStrategy(strategy).build();
        return csvToBean.parse();
    }
}

csv文件对应的bean对象DataAndTypeCsv.java

public class DataAndTypeCsv {

    /**
     * 字典代码
     */
    @CsvBindByName(column = "code")
    private String code;

    /**
     * 简写
     */
    @CsvBindByName(column = "short_name")
    private String shortName;

    /**
     * 名称
     */
    @CsvBindByName(column = "name", required = true)  //是否可以为null 否
    private String name;

    /**
     * 拼音或英文描述
     */
    @CsvBindByName(column = "remark")
    private String remark;

    /**
     * 父类型id
     */
    @CsvBindByName(column = "parent_id")
    private Integer parentId;

    /**
     * 类型名称
     */
    @CsvBindByName(column = "type_name", required = true)  //是否可以为null 否
    private String typeName;

    /**
     * 类型id
     */
    @CsvBindByName(column = "type_id", required = true)  //是否可以为null 否
    private Integer typeId;
    
	……
	get、set方法
	……

二、解析csv文件工具类(根据列的位置)

第一步,更换strategy策略 

ColumnPositionMappingStrategy<Object> strategy = new ColumnPositionMappingStrategy<>();

第二步,使用 @CsvBindByPosition 注解

    @CsvBindByPosition(position=1)
    private String address;

    @CsvBindByPosition(position=2)
    private String manageIpaddress;

    @CsvBindByPosition(position=3)
    private String eqpTypeId;

    @CsvBindByPosition(position=4)
    private String regionId;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值