java解析CSV文件三种方法(openCSV)

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

一、简介

1、pom.xml

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

二、手动解析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

 

 

 

使用Hutool进行CSV文件生成与解析 csv文件特点以及使用Hutool进行csv文件的生成与解析 阅读详情

相关推荐

使用OpenCSV和Apache Commons CSV解析CSV文件Java代码示例

OpenCSV和Apache Commons CSV是两个常用的CSV解析库,它们提供了简单且高效的方法来处理CSV数据。通过使用这两个强大的CSV解析库,开发者可以更加方便地处理CSV文件,并实现各种CSV相关的功能。我们将详细解析示例代码,包括CSV文件读取、数据处理和相关依赖的配置,帮助开发者快速上手使用这两个强大的CSV解析库。使用OpenCSV和Apache Commons CSV库,开发者可以轻松解析和处理CSV文件,快速实现各种CSV相关的功能。如有任何疑问,请随时提问。

优秀码农的博客 1775

Java读取csv文件三种方式

csv全称“Comma-Separated Values”,是一种逗号分隔值格式的文件,是一种用来存储数据的纯文本格式文件CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串。它们大多使用逗号字符来分隔(或定界)数据,但有时使用其他字符,如分号等;

weixin_42551921的博客 4222

Java实战:OpenCSV与Apache Commons CSV高效解析CSV数据对比

本文深入对比了Java生态中两大主流CSV解析OpenCSV与Apache Commons CSV。通过实战代码示例,从配置、基础解析、高级功能(如格式处理、数据写入、对象映射)到性能表现进行全方位剖析,并提供了清晰的选择建议,帮助开发者根据项目需求(如快速上手、对象映射、格式灵活性)高效选用合适的工具。

weixin_29218963的博客 353

简单易用的OpenCSV使用教程

使用C++分析大数据的时候,数据按CSV格式导出,可以用Excel分析数据。OpenCSV非常简单易用。

linyouhappy的博客 733

java环境下读取CSV文件(已优化)

java环境下读取CSV文件

棒棒糖的糖不含糖的博客 2万+

Javacsv文件读写分析

一、txt、csv、tsv文件 二、csv文件规范 三、csv使用场景 四、Java中的csv类库 1. javacsv 2. opencsv 写入器 读取器 解析器 构建器 映射策略 注解 写入方式 ① 简单的写入 ② 基于位置映射的写入 ③ 基于CsvBindByPosition注解映射的写入 ④ 基于列名映射的写入 ⑤ 基于CsvBindByName注解映射的写入 读取方式 ① 简单的读取 ② 基于位置映射的读取 ③ 基于CsvBindByPosition注解映射的读取 ④ 基于列名映射的读取 ⑤ 基

骑个小蜗牛的博客 2万+

csv解析java_Java CSV解析

csv解析javaWelcome to the Java CSV Parser tutorial. CSV files are one of the most widely used format to pass data from one system to another. Since CSV files are supported in Microsoft Excel, it can be ...

从零开始的教程世界 3133

java如何解析CSV文件并封装成bean

本文参考链接地址:https://blog.csdn.net/wangjun5159/article/details/51655806 java读取csv的类库主要有两种,opencsvjavacsvjavacsv很久不维护了。opencsv是apache的项目,并且至今仍在维护。 csv文件,全名 comma separated values,默认以逗号分隔,是纯文本文件。虽然用excel打开后格式排版了,但是那是excel对他进行了处理。用notepad或者sublime text打开能看到最原

chali1314的博客 1544

Java读写CSV格式文件opencsv

使用,下载地址: 一,读取CSV

怀揣梦想,努力前行 8万+

如何在Java中读取和解析CSV文件

逗号分隔值(CSV文件只是普通的纯文本文件,将数据逐列存储,并用分隔符将其分开(例如,通常是逗号“,”)。 例如 : 1,US,United States 2,MY,Malaysia 3,AU,Australia 要么 "1","US","United States" "2","MY","Malaysia" "3","AU","Australia" 注意 阅读此R...

一名可爱的技术搬运工 5万+

JAVAopencsv解析CSV文件

最近有些从大数据部门下载的基础数据,并已csv格式存储的,其中一些单个文件中数据量达到200W条。现在需要我把文件重新解析一次。因为其中一个表头对应的值是一个{key1=value1, key2=value2,key3=value3}类型。而且要把key1、key2、key3等解析出来并作为新的表头,然后生成新的csv文件。1.用Excel打开csv文件最大能展示出1048576行,想让领导能看到所有数据,当然需要拆分文件哦2.我是将csv拆分成多个且最大900000条数据的csv文件,即便如此,单个文件

书山有路勤为径,学海无涯乐作舟! 8984

java读取csv文件的多种方式

csv文件的介绍 以下是来自百度百科的介绍 逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据。CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。通常,所有记录都有完全相同的字段序列。通常都是纯文本文件。建议使用WORDPAD或是记事本来

将来不可预知,每一次选择毕竟是你做出的 3万+

openCsv读取csv文件

https://blog.csdn.net/cat_book_milk/article/details/52953786 Java读取csv文件 https://blog.csdn.net/galen2016/article/details/78119658 https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&tn=020033...

u013452335的博客 3897

opencsv解析csv文件

注意如果是UTF-8-BOM模式,第一行会有bom的头标识,请修改文件编码模式为UTF-8,否则第一列会为空 package com.ydd.tools; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.io.InputStreamReader; i...

ShareBoy 2767

opencsv操作CSV文件

1. CSV文件简介 现在好多的网站中导出的文件会出现一种csv文件,我们接下来学习一下csv文件的导出方式。 CSV文件:Comma-Separated Values,中文叫逗号分隔值或者字符分割值,其文件以纯文本的形式存储表格数据。该文件是一个字符序列,可以由任意数目的记录组成,记录间以某种换行符分割。每条记录由字段组成,字段间的分隔符是其他字符或者字符串。所有的记录都有完全相同的字段序列,相当于一个结构化表的纯文本形式。 用文本文件、excel或者类似与文本文件的编辑器都可以打开CSV文件。 为了简化

yuzheh521的博客 3018

java读写csv文件 内存溢出_使用OpenCSVJava中读写CSV

介绍这是专门针对Java CSV读写库的简短系列文章的最后一篇,也是上一篇文章(使用Apache Commons CSVJava读写CSV)的直接延续。OpenCSVOpenCSV是最简单易懂的CSV解析器之一,它使用标准Reader/Writer类并CSVReader在顶部提供实现。就像Apache Commons CSV一样,OpenCSV具有Apache 2.0许可证。在下载并决定是否使用...

weixin_29798025的博客 1851

Opencsv读取CSV

<dependency> <groupId>com.opencsv</groupId> <artifactId>opencsv</artifactId> <version>4.4</version> </d...

JesJiang的博客 1736

Java中使用opencsv读写csv文件示例

OpenCSV是一个简单的用于解析CSV文件java类库,它封装了CSV格式文件的输出和读入,可以自动处理CSV格式中的特殊字符,最重要的是OpenCSV可以用于商业化(commercial-friendly)。Java中使用opencsv读写csv文件示例。1、类vGidQ似于FileReader。1、自定义分隔符,如使用tab为分隔符。生成Jahttp://vabeans。1、使用Iterator方式读。3、从第二(n)行开始解析。2、同样可以使用转义符。

tbapi_ok的博客 1028
上一篇: MySQL保留2位小数
下一篇: 云服务--漏洞修复
Knight-Key
博客等级 码龄9年 2353粉丝 114原创
评论 8
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Knight-Key

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值