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;
* 解析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();
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;
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 解析器。今天我们一起看看基于 OpenCSV 的 CSV 解析示例。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文件,即便如此,单个文件也