Java使用Opencv读取csv文件

读取含有BOM头的文件遇到的问题 需求是读取一个csv文件,然后解析成对应的数据结构。csv必须包含指定的某些列,通过列名header来进行校验。 解析配置文件的方法。public List<QuestionData> buildConfigData(final MultipartFile file) { CsvReader csvReader = null; List<QuestionData... 阅读详情

1 需要的jar

<!-- 需要的jar包 -->
<dependency>
    <groupId>com.opencsv</groupId>
    <artifactId>opencsv</artifactId>
    <version>4.6</version>
</dependency>
​
<!-- 使用opencsv必须的jar包 -->
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.11</version>
</dependency>
​
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-collections4</artifactId>
    <version>4.4</version>
</dependency>

<!-- 如果读取带BOM的文件,需要使用下面的包,不使用会出现第一列读不出来 -->
<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.6</version>
</dependency>

2 表头中文映射读取

2.1 java代码


/**
 * 使用表头中文映射读取CSV文件,表头为"姓名"、"尺寸"、"描述"
 */
public List<Book> readCsv() {
    try {
        // 创建输入流
        FileInputStream fileInputStream = new FileInputStream(this.hotwordsCsvPath);
        // 读取带BOM的CSV文件需要使用BOMInputStream
        BOMInputStream bomInputStream = new BOMInputStream(fileInputStream);

        // 创建Reader
        InputStreamReader inputStreamReader = new InputStreamReader(bomInputStream, StandardCharsets.UTF_8);
        CSVReader csvReader = new CSVReaderBuilder(inputStreamReader).build();

        // 设置实体映射策略
        HeaderColumnNameTranslateMappingStrategy<Book> strategy = new HeaderColumnNameTranslateMappingStrategy<>();
        strategy.setType(Book.class);
        Map<String, String> columnMapping = new HashMap<>();
        columnMapping.put("姓名", "name");
        columnMapping.put("尺寸", "height");
        columnMapping.put("描述", "desc");

        // 设置映射
        strategy.setColumnMapping(columnMapping);

        // 实体映射
        CsvToBeanBuilder<Book> csvToBeanBuilder = new CsvToBeanBuilder<Book>(csvReader);
        csvToBeanBuilder.withSeparator(CSVWriter.DEFAULT_SEPARATOR);
        csvToBeanBuilder.withQuoteChar(CSVWriter.NO_QUOTE_CHARACTER);
        csvToBeanBuilder.withMappingStrategy(strategy);

        CsvToBean csvToBean = csvToBeanBuilder.build();

        // 解析csv
        List list = csvToBean.parse();

        System.out.println(list);

    } catch (IOException e) {
        e.printStackTrace();
    } ;


    return null;
}

2.2 csv文件

姓名尺寸描述
中国0,0.8164938785607375中国人民真精神0
中国10.8979758050541083中国人民真精神1

3 简单关系

3.1 java代码

​
/**
使用默认的方式读取CSV文件,表头为"name"、"height"、"desc";
*/
public List<Book> readCsvSimple(){
    try {
        // 建立Reader
        InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStream("F:\\data\\simple.csv"), StandardCharsets.UTF_8);
        CSVReader csvReader = new CSVReaderBuilder(inputStreamReader).build();
​
        // 实体转换
        CsvToBeanBuilder<Book> csvToBeanBuilder = new CsvToBeanBuilder<Book>(csvReader);
        csvToBeanBuilder.withSeparator(CSVWriter.DEFAULT_SEPARATOR);
        csvToBeanBuilder.withQuoteChar(CSVWriter.NO_QUOTE_CHARACTER);
        csvToBeanBuilder.withType(Book.class);
​
        CsvToBean csvToBean = csvToBeanBuilder.build();
​
        // 解析列表
        List list = csvToBean.parse();
​
        System.out.println(list);
​
    } catch (IOException e) {
        e.printStackTrace();
    };
​
​
    return null;
}
​

3.2 csv文件

techweightdesc
中国0,0.8164938785607375中国人民真精神0
中国10.8979758050541083中国人民真精神1

4 实体

/**
Book实体关系
*/
​
@Data
@NonNull
@NoArgsConstructor
@Component
public class Book {
    private String name;
    private double height;
    private String desc;
​
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
​
    public double getHeight() {
        return height;
    }
    public void setHeight(double height) {
        this.height = height;
    }
​
    public String getDesc() {
        return desc;
    }
    public void setDesc(String desc) {
        this.desc = desc;
    }
}

5 使用item读取csv

try {
    InputStreamReader reader = new InputStreamReader(new FileInputStream(new File(csvPath)), "UTF-8");
    CSVReader csvReader = new CSVReaderBuilder(reader).build();
    Iterator<String[]> iterator = csvReader.iterator();
    // 如果有数据进行遍历读取
    if(iterator.hasNext()){
        // 跳过第一行
        iterator.next();
        
        // 循环读取数据
        while (iterator.hasNext()) {
            // 读取一行的数据
            List<String> list = Arrays.asList(iterator.next());
            // 使用索引读取单元格数据
            System.out.println(list[0]);
        }
    }
    return null;
} catch (IOException e) {
    System.out.println("Read the csv of "+csvPath+" is error !");
    e.printStackTrace();
    return false;
}

6 使用OpenCSV写入CSV

// 使用字符串数组写入CSV
public boolean writeCsvArr(){
    try {
        FileWriter fileWriter = new FileWriter("D:/mybook.csv");
        CSVWriter writer = new CSVWriter(fileWriter);
        String[] row = new String[]{"name", "height", "desc"};
        writer.writeNext(row);

        row = new String[]{"zhangsan", "10", "my desc"};
        writer.writeNext(row);

        writer.close();
        fileWriter.close();
        return true;
    } catch (IOException e) {
        e.printStackTrace();
    }
    return false;
}


// 含有BOM字符,使用字符串数组写入CSV
public boolean writeCsvArrBom(){
    try {
        byte [] bs = { (byte)0xEF, (byte)0xBB, (byte)0xBF};
        FileOutputStream fileOutputStream = new FileOutputStream("D:/mybook.csv");
        OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream);
        outputStreamWriter.write(new String(bs));

        CSVWriter writer = new CSVWriter(outputStreamWriter);
        String[] row = new String[]{"name", "height", "desc"};
        writer.writeNext(row);

        row = new String[]{"zhangsan", "10", "my desc"};
        writer.writeNext(row);

        writer.close();
        outputStreamWriter.close();
        fileOutputStream.close();

        return true;
    } catch (IOException e) {
        e.printStackTrace();
    }
    return false;
}


// 使用对象列表写入CSV
public boolean writeCsvList(){
    try {

        Writer writer = new FileWriter("D:/mybook.csv");
        StatefulBeanToCsv<Book> beanToCsv = new StatefulBeanToCsvBuilder<Book>(writer).build();

        Book book = new Book();
        book.setDesc("CSV 11 ");
        book.setHeight(11);
        book.setName("Read CSV 11");
        beanToCsv.write(book);

        book = new Book();
        book.setDesc("CSV 22");
        book.setHeight(22);
        book.setName("Read CSV 22");
        beanToCsv.write(book);

        writer.close();
        return true;
    } catch (IOException | CsvRequiredFieldEmptyException | CsvDataTypeMismatchException e) {
        e.printStackTrace();
    }
    return false;
}

openCsv jar文件 Java 解析CSV 用的jar包 + 使用说明 立即下载

相关推荐

opencsv.jar

opencsv.jar包,方便进行数据的导入导出

bom csv java_Java处理文件BOM头的方式推荐

背景:java普通的文件读取方式对于bom是无法正常识别的。使用普通的InputStreamReader,如果采用的编码正确,那么可以获得正确的字符,但bom仍然附带在结果中,很容易导致数据处理出错。另外,对于存在BOM头的文件,无法猜测它使用的编码。目标:实现一种方式,可对BOM头进行捕捉和过滤解决方案有二:一、 使用apache的工具类,以BOMStream为例:该类的构造方式:BOMInp...

weixin_39697096的博客 425

opencsv-2.3.jar

javaweb/javaEE常用jar包,亲测可用,导入到java工程中使用

Java处理文件BOM头的方式推荐

背景: java普通的文件读取方式对于bom是无法正常识别的。    使用普通的InputStreamReader,如果采用的编码正确,那么可以获得正确的字符,但bom仍然附带在结果中,很容易导致数据处理出错。 另外,对于存在BOM头的文件,无法猜测它使用的编码。 目标: 实现一种方式,可对BOM头进行捕捉和过滤 解决方案有二: 一、  使用apache的工具类,以BOM

美码师的专栏 1万+

2024从零开始使用VSCode编程(静态页面制作篇)HTML+CSS+JS阶段

VSCode第一个前端静态页面的编写

ssrsrrn的博客 9591

jetson nano网络配置(有线、无线、USB)

注意:本节内容使用Jetson nano B01 版本或Jetson nano ALT 版本安装方式相同,在安装无线网卡等设备时,由于线材和设备比较脆弱,需要轻拿轻放,接口连接不上时,需要重新对准接口在进行连接,不要强行连接。Jetson nano 需要连接网络来进行更多的操作,本节就来讲解Jetson nano 的三种网络连接方法。有线:我们可以使用网线连接Jetson nano 的RJ45 接口,实现联网。

m0_73841621的博客 1万+

Java读写CSV格式文件(opencsv)

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

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

保姆级教程:用Comsol Multiphysics仿真你的第一个SAW滤波器(含压电材料参数设置)

本文提供了一份详细的COMSOL Multiphysics教程,指导读者完成表面声波滤波器(SAW)的压电仿真全流程。从压电材料参数设置、叉指换能器建模到多物理场耦合分析,特别强调了实际应用中容易出错的细节和解决方案,帮助工程师快速掌握SAW滤波器仿真技术。

weixin_42665255的博客 592

Java opencsv 生成、读取、下载、删除CSV文件

1. 利用opencsv包中的CSVWriter类,生成csv文件 import java.io.File; import java.io.FileOutputStream; import java.io.OutputStreamWriter; import java.util.List; import com.opencsv.CSVWriter; public abstract clas

cat_book_milk的博客 8876

STM32CubeMx+stm32f407+FreeRTOS+LAN8720实现LWIP以太网UDP TCP数据收发功能

单片机实现LWIP的调试

qq_40600203的博客 3070

StarRocks FE启动异常

服务器断电,StarRocks FE 启动失败。

qq_15138049的博客 1112

openCsv读取csv文件

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

u013452335的博客 3907

树莓派4B学习笔记一

树莓派4b烧录Ubuntu20.04&&配置Ubuntu桌面

m0_55202222的博客 3641

java读取CSV文件

java读取CSV文件

擎云科技的博客 1626

大模型——Coze工作流实战:一键生成像素风格视频

本文介绍了如何利用Coze平台工作流生成像素风格心理学短视频的方法。通过创建工作流、设置变量节点、调用大模型生成文案、数据格式化处理、合成音频、生成字幕等步骤,最终实现从输入主题到生成完整视频的自动化流程。文章详细展示了每个节点的具体配置方法,包括提示词编写和数据处理脚本,为读者提供了完整的像素风格视频制作解决方案。

819

Python库CloudScraper详细使用(绕过 Cloudflare 的反机器人页面的 Python 模块)

CloudScraper是一个专门用于绕过Cloudflare反机器人保护的Python库,它基于requests库构建,能够处理Cloudflare的5秒盾、WAF和人机验证等防护机制。

数据知道的博客 1万+

Java 读写csv

本文结构: 废话 动手读csv 写csv 工作中需要读写csv,由于csv 文件较大,数据比较多,所以需要选择一个速度快的csv 读取插件。经过比较选择opencsv 。官方解释:Opencsv是一个易于使用的CSV(逗号分隔值)解析器库。之所以开发它,是因为当时所有CSV解析器都没有商业友好的许可证。Java 7是目前支持的最小版本。 Opencsv支持您可能想要做的所有基本CSV类型的事情...

哎幽的成长 5707

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

分享一个CSV文件操作工具类,超好用

文章目录一,代码片二,maven依赖三,最后 一,代码片 分享一个CSV文件操作工具类,超好用,废话不多说,直接上代码: import com.google.common.collect.Lists; import com.opencsv.CSVReader; import com.opencsv.CSVReaderBuilder; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; i.

大团猿的博客 1152

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

java csv 复杂表头_java – 如何从opencsv中的特定标头读取?

opencsv中没有内置功能可以按名称从列中读取.CSVReader reader = new CSVReader(new FileReader("yourfile.csv"));String [] nextLine;while ((nextLine = reader.readNext()) != null) {// nextLine[] is an array of values from th...

weixin_30621429的博客 762

java操作csv文件(读、写)

今天在做项目的时候,发现使用POI无法解析以csv文件结尾的文件,虽然csv文件能用Excel打开,但是csv文件没有像Excel一样有规定的电子表格形式,故使用POI无法解析csv文件,在网上找了一下,发现java有提供javacsv文件来帮忙解析csv文件。    CSV是Comma Separated Values(逗号分隔值)的英文缩写,通常都是纯文本文件。首先先来了解csv文件的基本格式:

鲁肃小生 1万+

简单读取CSV文件

java简单实现CSV的读取:   1.依赖的jar:opencsv-2.3.jar, rt.jar或者更高   2代码如下:   public void readCSV(File csvFile) {        try {              CSVReader reader = new CSVReader(new FileReader(csvFile));   ...

程序员 288

用opencsv文件读写CSV文件

首先明白csv文件长啥样儿: 用excel打开就变成表格了,看不到细节推荐用其它简单粗暴一点儿的编辑器,比如Notepad++, csv文件内容如下: csv文件默认用逗号分隔各列。 有了基础的了解就进入主题,用Opencsv读写csv文件 读:CSVReader写:CSVWriter 下面分别来看一下opencsv为我们提供的方法(这里只介绍最常用的几

v1t1p9hvbd的博客 3272

解决csv文件读取时第一列无法读取到的问题

解决csv文件读取时第一列无法读取到的问题 在使用opencsv做csv文件导出与导入的时候,由于导入的csv文件带有bom标识,导致老是文件的第一列无法读取,下面贴出解决方法: 症状: 使用opencsv进行文件读取时,无法读取到第一列的内容 原因: csv文件带有bom头 解决方法: 方法一:notepad++打开csv文件,在“编码”处选择“使用utf-8...

dushu990的博客 1万+

openCSV操作CSV文件实例

opencsv.jar下载地址:http://download.youkuaiyun.com/detail/lujian863/4604588 1.读取CSV文件 import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; im...

weixin_30364147的博客 231
上一篇: docker常用命令
下一篇: Putty颜色配置
MasonYyp
博客等级 码龄9年 301粉丝 297原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值