二、手动解析CSV文件

    //	析csv文件并转成bean(方法一)




    

    public static List<CsvFile> getCsvDataMethod1(MultipartFile file) {
        ArrayList<CsvFile> csvFileList = new ArrayList<>();
        InputStreamReader in = null;
        String s = null;
        try {
            in = new InputStreamReader(file.getInputStream(), "utf-8");
            BufferedReader bufferedReader = new BufferedReader(in);
            String line = null;
            while ((line = bufferedReader.readLine()) != null) {
                String[] split = line.split(",");
                CsvFile csvFile = new CsvFile();
                csvFile.setName(splitResult(split[0]));
                csvFile.setTitle(splitResult(split[1]));
                csvFile.setNumber(splitResult(split[2]));
                csvFile.setType(splitResult(split[3]));
                csvFile.setPersonnel(splitResult(split[4]));
                csvFile.setTime(splitResult(split[5]));
                csvFileList.add(csvFile);
        } catch (IOException e) {
            e.printStackTrace();
        return csvFileList;

去重引号""

private static String splitResult(String once) { String result = ""; for (int i = 0; i < once.length(); i++) { if (once.charAt(i) != '"') { result += once.charAt(i); return result;

三、openCSV解析CSV文件

* 解析csv文件并转成bean(方法二) * @param file csv文件 * @return 数组 public static List<String[]> getCsvDataMethod2(MultipartFile file) { List<String[]> list = new ArrayList<String[]>(); int i = 0; try { CSVReader csvReader = new CSVReaderBuilder( new BufferedReader( new InputStreamReader(file.getInputStream(), "utf-8"))).build(); Iterator<String[]> iterator = csvReader.iterator(); while (iterator.hasNext()) { String[] next = iterator.next(); //去除第一行的表头,从第二行开始 if (i >= 1) { list.add(next); i++; return list; } catch (Exception e) { System.out.println("CSV文件读取异常"); return list;

四、openCSV解析CSV文件(结果为实体类)

* 解析csv文件并转成bean(方法三) * @param file csv文件 * @param clazz 类 * @param <T> 泛型 * @return 泛型bean集合 public static <T> List<T> getCsvDataMethod3(MultipartFile file, Class<T> clazz) { InputStreamReader in = null; CsvToBean<T> csvToBean = null; try { in = new InputStreamReader(file.getInputStream(), "utf-8"); HeaderColumnNameMappingStrategy<T> strategy = new HeaderColumnNameMappingStrategy<>(); strategy.setType(clazz); csvToBean = new CsvToBeanBuilder<T> (in).withMappingStrategy(strategy).build(); } catch (Exception e) { logger.error("数据转化失败"); return null; return csvToBean.parse();
import com.opencsv.bean.CsvBindByName;
import lombok.Data;
@Data
public class CsvFile {
    @CsvBindByName(column = "name")
    private String name;
    @CsvBindByName(column = "title")
    private String title;
    @CsvBindByName(column = "number")
    private String number;
    @CsvBindByName(column = "type")
    private String type;
    @CsvBindByName(column = "personnel")
    private String personnel;
    @CsvBindByName(column = "time")
    private String time;

五、整理完成的CsvUtils

import com.lydms.testopencsv.domain.CsvFile;
import com.opencsv.CSVReader;
import com.opencsv.CSVReaderBuilder;
import com.opencsv.bean.CsvToBean;
import com.opencsv.bean.CsvToBeanBuilder;
import com.opencsv.bean.HeaderColumnNameMappingStrategy;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.web.multipart.MultipartFile;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class CsvUtils {
    private static final Logger logger = LogManager.getLogger(CsvUtils.class);
     * 解析csv文件并转成bean(方法二)
     * @param file csv文件
     * @return 数组
    public static List<String[]> getCsvDataMethod2(MultipartFile file) {
        List<String[]> list = new ArrayList<String[]>();
        int i = 0;
        try {
            CSVReader csvReader = new CSVReaderBuilder(
                    new BufferedReader(
                            new InputStreamReader(file.getInputStream(), "utf-8"))).build();
            Iterator<String[]> iterator = csvReader.iterator();
            while (iterator.hasNext()) {
                String[] next = iterator.next();
                //去除第一行的表头,从第二行开始
                if (i >= 1) {
                    list.add(next);
                i++;
            return list;
        } catch (Exception e) {
            System.out.println("CSV文件读取异常");
            return list;
     * 解析csv文件并转成bean(方法三)
     * @param file  csv文件
     * @param clazz 类
     * @param <T>   泛型
     * @return 泛型bean集合
    public static <T> List<T> getCsvDataMethod3(MultipartFile file, Class<T> clazz) {
        InputStreamReader in = null;
        CsvToBean<T> csvToBean = null;
        try {
            in = new InputStreamReader(file.getInputStream(), "utf-8");
            HeaderColumnNameMappingStrategy<T> strategy = new HeaderColumnNameMappingStrategy<>();
            strategy.setType(clazz);
            csvToBean = new CsvToBeanBuilder<T>(in).withMappingStrategy(strategy).build();
        } catch (Exception e) {
            logger.error("数据转化失败");
            return null;
        return csvToBean.parse();
     * 解析csv文件并转成bean(方法一)
     * @param file
     * @return
    public static List<CsvFile> getCsvDataMethod1(MultipartFile file) {
        ArrayList<CsvFile> csvFileList = new ArrayList<>();
        InputStreamReader in = null;
        String s = null;
        try {
            in = new InputStreamReader(file.getInputStream(), "utf-8");
            BufferedReader bufferedReader = new BufferedReader(in);
            String line = null;
            while ((line = bufferedReader.readLine()) != null) {
                String[] split = line.split(",");
                CsvFile csvFile = new CsvFile();
                csvFile.setName(splitResult(split[0]));
                csvFile.setTitle(splitResult(split[1]));
                csvFile.setNumber(splitResult(split[2]));
                csvFile.setType(splitResult(split[3]));
                csvFile.setPersonnel(splitResult(split[4]));
                csvFile.setTime(splitResult(split[5]));
                csvFileList.add(csvFile);
        } catch (IOException e) {
            e.printStackTrace();
        return csvFileList;
    private static String splitResult(String once) {
        String result = "";
        for (int i = 0; i < once.length(); i++) {
            if (once.charAt(i) != '"') {
                result += once.charAt(i);
        return result;

六、相关地址

参考地址:

https://www.cnblogs.com/xhj99/p/13536465.html

Git地址:

https://github.com/li395092734/test-opencsv

CSV文件

https://files.cnblogs.com/files/blogs/604830/csvfile.zip
                                    csv全称“Comma-Separated Values”,是一种逗号分隔值格式的文件,是一种用来存储数据的纯文本格式文件CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串。它们大多使用逗号字符来分隔(或定界)数据,但有时使用其他字符,如分号等;
                                    CSV(Comma-Separated Values,逗号分隔值)文件是一种常见的文本文件格式,用于存储表格数据。它简单、易于理解,并且与许多应用程序和编程语言兼容。CSV文件通常由纯文本组成,并以某种形式的分隔符(通常是逗号)来分隔值。Apache Commons CSV是一个流行的第三方库,专门用于处理CSV文件。它提供了丰富的API,能够快速解析CSV数据,并提供了强大的错误处理机制,从而提高了代码的健壮性。
                                    官网:目前最新版本4.0,更新比较频繁,4.0版本还不够成熟。支持注解(根据名称或者位置)支持自定义转换器AbstractBeanField支持跳跃行skipLine和数据过滤Filter@CsvBindByName:根据CSV输入中该字段的标题名,将一个bean字段映射到CSV文件中的一个字段, 可以控制列名,按名字列名的先后顺序好像是按照字母排序的。
                                    OpenCSV是一个简单的用于解析CSV文件java类库,它封装了CSV格式文件的输出和读入,可以自动处理CSV格式中的特殊字符,最重要的是OpenCSV可以用于商业化(commercial-friendly)。具体的使用方法:读CSV文件1、使用Iterator方式读CSVReader reader = new CSVReader(new FileReader("yourfile.csv"))...
                                    OpenCSV 是一个轻量级的 Java CSV 解析器。今天我们一起看看基于 OpenCSVCSV 解析示例。OpenCSV 提供了 CSV 解析的大部分特性。OpenCSV 比较受欢迎的原因是在 Java 中没有任何内置的 CSV 解析器。
                                    一com.opencsvopencsv4.1package com.in.out.mine.controller;import com.in.out.mine.ServiceImpl.FileServiceImpl;import com.in.out.mine.entity.Student;import com.in.out.mine.utils.ResObject;import com.open...
                                    最近有些从大数据部门下载的基础数据,并已csv格式存储的,其中一些单个文件中数据量达到200W条。现在需要我把文件重新解析一次。因为其中一个表头对应的值是一个{key1=value1, key2=value2,key3=value3}类型。而且要把key1、key2、key3等解析出来并作为新的表头,然后生成新的csv文件。1.用Excel打开csv文件最大能展示出1048576行,想让领导能看到所有数据,当然需要拆分文件哦2.我是将csv拆分成多个且最大900000条数据的csv文件,即便如此,单个文件