commons-csv

maven依赖

        <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-csv --><dependency><groupId>org.apache.commons</groupId><artifactId>commons-csv</artifactId><version>1.14.1</version></dependency>

示例

读取csv

        Reader in = new FileReader("E:\\demo2\\src\\test\\resources\\hello.csv");// 读取文件:CSVFormat.EXCEL 表示使用Excel风格的 CSV 格式进行解析CSVParser records = CSVFormat.EXCEL.parse(in);// 读取所有行List<CSVRecord> list = records.getRecords();// 遍历每一行for (CSVRecord record : list) {// 输出每一行的大小System.out.println(record.size());// 遍历每一行的每一列for (int i = 0; i < record.size(); i++) {System.out.print(record.get(i));}System.out.println();}

写入csv

        FileWriter writer = new FileWriter("E:\\demo2\\src\\test\\resources\\study.csv");CSVPrinter csvPrinter = new CSVPrinter(writer, CSVFormat.DEFAULT);csvPrinter.printRecord("第一行第一列", "第一行第二列");csvPrinter.printRecord("第二行第一列", "第二行第二列");csvPrinter.flush();

常用API

CSVFormat

  • 可用常量
常量说明
DEFAULT默认格式,使用逗号作为字段分隔符,双引号作为文本限定符,换行符使用 \r\n,允许空行
EXCELExcel 格式,使用逗号作为字段分隔符,双引号作为文本限定符,换行符使用 CRLF,允许空行
INFORMIX_UNLOADInformix 数据库导出格式,使用管道符号作为字段分隔符,单引号作为文本限定符,换行符使用系统默认的换行符。
INFORMIX_UNLOAD_CSVInformix 数据库导出 CSV 格式,使用逗号作为字段分隔符,单引号作为文本限定符,换行符使用系统默认的换行符。
MONGODB_CSVMongoDB 导出 CSV 格式,使用逗号作为字段分隔符,双引号作为文本限定符,换行符使用 LF。
MONGODB_TSVMongoDB 导出 TSV 格式,使用制表符作为字段分隔符,双引号作为文本限定符,换行符使用 LF。
MYSQLMySQL 导出 CSV 格式,使用逗号作为字段分隔符,双引号作为文本限定符,换行符使用 LF。
ORACLEOracle 数据库导出格式,使用逗号作为字段分隔符,双引号作为文本限定符,换行符使用 CRLF。
POSTGRESQL_CSVPostgreSQL 导出 CSV 格式,使用逗号作为字段分隔符,双引号作为文本限定符,换行符使用 LF。
POSTGRESQL_TEXTPostgreSQL 导出文本格式,使用制表符作为字段分隔符,双引号作为文本限定符,换行符使用 CRLF。
RFC4180符合 RFC4180 标准的 CSV 格式,使用逗号作为字段分隔符,双引号作为文本限定符,换行符使用 CRLF。
TDFTab-delimited 格式,使用制表符作为字段分隔符,双引号作为文本限定符,换行符使用系统默认的换行符。
  • 可用方法
方法说明
newFormat(char delimiter)静态方法,获取CSVFormat实体
valueOf(String format)静态方法,获取CSVFormat实体
builder()获取CSVFormat构造器
format(Object… values)数据格式化,格式化为一行的数据
parse(Reader reader)获取解析器,用于读取csv文件
print(Appendable out)
print(File out, Charset charset)
print(Object value, Appendable out, boolean newRecord)
print(Path out, Charset charset)
获取打印器,用于写入csv文件
printer()获取打印器,用于写入csv文件
println(Appendable appendable)用于写入数据
printRecord(Appendable appendable, Object… values)用于写入记录数据

CSVFormat.Builder

方法说明
get()获取构建的CSVFormat对象
setAllowMissingColumnNames(boolean allowMissingColumnNames)允许缺失的列名
setAutoFlush(boolean autoFlush)自动刷新
setCommentMarker(char commentMarker)
setCommentMarker(Character commentMarker)
注释标记
setDelimiter(char delimiter)
setDelimiter(String delimiter)
分隔符
setDuplicateHeaderMode(DuplicateHeaderMode duplicateHeaderMode)设置重复报头模式
setEscape(char escapeCharacter)
setEscape(Character escapeCharacter)
转义字符
setHeader(Class<? extends Enum<?>> headerEnum)
setHeader(ResultSet resultSet)
setHeader(ResultSetMetaData resultSetMetaData)
setHeader(String… header)
设置表头
setHeaderComments(Object… headerComments)
setHeaderComments(String… headerComments)
设置表头注释
setIgnoreEmptyLines(boolean ignoreEmptyLines)是否忽略空行
setIgnoreHeaderCase(boolean ignoreHeaderCase)忽略标题大小写
setIgnoreSurroundingSpaces(boolean ignoreSurroundingSpaces)忽略周围空间
setLenientEof(boolean lenientEof)
setMaxRows(long maxRows)设置最大行
setNullString(String nullString)为null时显示的字符串
setQuote(char quoteCharacter)
setQuote(Character quoteCharacter)
引用字符
setQuoteMode(QuoteMode quoteMode)引用方式
setRecordSeparator(char recordSeparator)
setRecordSeparator(String recordSeparator)
记录分隔符
setSkipHeaderRecord(boolean skipHeaderRecord)跳表头记录
setTrailingData(boolean trailingData)尾随数据
setTrailingDelimiter(boolean trailingDelimiter)尾随分隔符
setTrim(boolean trim)是否trim处理

CSVParser

方法说明
builder()静态方法,获取CSVParser构造器
parse(File file, Charset charset, CSVFormat format)
parse(InputStream inputStream, Charset charset, CSVFormat format)
parse(Path path, Charset charset, CSVFormat format)
parse(Reader reader, CSVFormat format)
parse(String string, CSVFormat format)
parse(URL url, Charset charset, CSVFormat format)
静态方法,解析指定csv文件
close()关闭资源
getCurrentLineNumber()获取当前行号
getFirstEndOfLine()获取遇到的第一个行尾字符串。
getHeaderMap()获取表头
getHeaderNames()获取表头
getRecordNumber()获取记录数量
getRecords()获取每行的记录数据集合
getTrailerComment()获取预告片评论(如果有)。
getHeaderComment()获取标题评论(如果有)。
hasHeaderComment()检查是否有标题注释。
hasTrailerComment()检查是否有预告片注释。
iterator()获取记录迭代器
stream()获取数据流

CSVPrinter

方法说明
close()
close(boolean flush)
关闭资源
flush()刷新资源
getOut()获取Appendable对象用于处理输出数据
getRecordCount()获取数据条数
print(Object value)写入一行数据
printComment(String comment)输入注释,CSVFormat.Builder配置setCommentMarker时生效
printHeaders(ResultSet resultSet)输入数据库结果集数据
println()插入空行
printRecord(Iterable<?> values)
printRecord(Object... values)
printRecord(Stream<?> stream)
插入一行记录
printRecords(Iterable<?> values)
printRecords(Object... values)
printRecords(ResultSet resultSet)
printRecords(ResultSet resultSet, boolean printHeader)
printRecords(Stream<?> values)
插入多行记录

CSVRecord

方法说明
get(Enum<?> e)
get(int i)
get(String name)
获取一行数据的指定位置数据
getBytePosition()返回此记录在源流中的起始位置,以字节为单位。
getCharacterPosition()将此记录的开始位置作为源流中的字符位置返回。
getComment()返回此记录的注释(如果有)。
getParser()返回解析器。
getRecordNumber()获取当前数据行数
hasComment()检查此记录是否有注释,否则为 false。
isConsistent()说明记录大小是否与标头大小匹配。
isMapped(String name)检查给定列是否已映射,即其名称已定义到解析器。
isSet(int index)
isSet(String name)
检查给定列是否已映射并具有值。
iterator()获取迭代器
putIn(M map)将此记录的所有值放入给定的 Map 中。
size()获取一行数据的数据数
toList()获取一行的数据为List集合
toMap()取一行的数据为Map集合,需配置CSVFormat.Builder的setHeader为map集合的键
values()获取一行的数据为数组

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/96961.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/96961.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 1446.连续字符

给你一个字符串 s &#xff0c;字符串的「能量」定义为&#xff1a;只包含一种字符的最长非空子字符串的长度。 请你返回字符串 s 的 能量。 示例 1&#xff1a; 输入&#xff1a;s “leetcode” 输出&#xff1a;2 解释&#xff1a;子字符串 “ee” 长度为 2 &#xff0c;只包…

CTFHub SSRF通关笔记9:302跳转 Bypass 原理详解与渗透实战

目录 一、SSRF与302跳转 1、SSRF 2、302响应 3、SSRF与302结合 &#xff08;1&#xff09;SSRF源码分析 &#xff08;2&#xff09;攻击链条&#xff08;Flow of Exploit&#xff09; 二、渗透实战 1、打开靶场 2、尝试127.0.0.1访问 3、file协议分析源码 &#xff…

Windows-Use实战:AI驱动的Windows自动化

Windows-Use实战:AI驱动的Windows自动化 前言 项目介绍与准备工作 Windows-Use是什么? 系统要求 必需环境 步骤一:安装Python和基础环境 1.1 安装Python 检查Python版本 Python安装步骤 1.2 创建项目目录 步骤二:安装Windows-Use 2.1 使用pip安装(推荐) 步骤三:运行和基…

STM32-FreeRTOS操作系统-二值信号量与计数信号量

引言在嵌入式开发领域&#xff0c;任务同步与通信是系统稳定运行的核心。STM32配合FreeRTOS操作系统&#xff0c;为开发者提供了强大的工具支持。其中&#xff0c;二值信号量和计数信号量作为FreeRTOS的关键同步机制&#xff0c;分别用于任务间的简单同步和资源计数控制。二值信…

MarTech营销技术全景解析:概念、图谱与最新实践案例

一、引言&#xff1a;为什么企业越来越依赖MarTech&#xff1f;在数字化浪潮下&#xff0c;企业营销环境正发生深刻变化&#xff1a;客户触点增加&#xff1a;从官网、社交媒体到短视频、展会&#xff0c;信息渠道呈指数级增长。决策链条复杂&#xff1a;B2B客户通常需要多轮调…

服务器 - 从一台服务器切换至另一台服务器(损失数十条访客记录)

服务器 - 从一台服务器切换至另一台服务器(损失数十条PV记录为代价) 看着四年的服务器正式到期&#xff0c;没什么轰轰烈烈的告别&#xff0c;就像目送老朋友转身走远&#xff0c;只默默记下&#xff1a;哦&#xff0c;原来它陪了我这么久啊。 前言 一台陪伴了我4年的服务器昨…

《云原生边缘与AI训练场景:2类高频隐蔽Bug的深度排查与架构修复》

在云原生技术向边缘计算与AI训练场景渗透的过程中&#xff0c;基础设施层的问题往往会被场景特性放大——边缘环境的弱网络、异构硬件&#xff0c;AI训练的高资源依赖、分布式协作&#xff0c;都可能让原本隐藏的Bug以“业务故障”的形式爆发。这些问题大多不具备直观的报错信息…

【51单片机】【protues仿真】基于51单片机数控直流稳压电源系统

目录 一、主要功能 二、使用步骤 三、硬件资源 四、软件设计 五、实验现象 一、主要功能 1、数码管显示输出电压值 2、滑动电阻调节输出电压 3、电压输出范围0-15V&#xff0c;步进值1 二、使用步骤 基于51单片机的数控直流稳压电源是一种通过数字控制实现电压调节的智…

xtuoj Rectangle

题目思路将矩形间的相交情况通过投影转化为x、y两个方向下的线段是否相交&#xff0c;即前面的题目&#xff0c;判断两个区间是否相交&#xff0c;x投影的每个区间的左端点是每个矩形x的min&#xff0c;右端点是每个矩形的x的max&#xff0c;y投影情况同理&#xff0c;只要x轴的…

【深度学习踩坑实录】从 Checkpoint 报错到 TrainingArguments 精通:QNLI 任务微调全流程复盘

作为一名深度学习初学者&#xff0c;最近在基于 Hugging Face Transformers 微调 BERT 模型做 QNLI 任务时&#xff0c;被Checkpoint 保存和TrainingArguments 配置这两个知识点卡了整整两天。从磁盘爆满、权重文件加载报错&#xff0c;到不知道如何控制 Checkpoint 数量&#…

Java面试小册(3)

21【Q】: 什么是Java的SPI机制&#xff1f;【A】&#xff1a;SPI 是一种插件机制&#xff0c;用于在运行时动态加载服务的实现。它通过定义接口&#xff08;服务接口&#xff09;并提供一种可扩展的方式来让服务的提供着&#xff08;实现类&#xff09;在运行时注入&#xff0c…

P1150 Peter 的烟

记录20#include <bits/stdc.h> using namespace std; int main(){int n,k;cin>>n>>k;int cnt0;while(n>k){cntk;nn-k1;}cntn;cout<<cnt;return 0; }突破口每吸完一根烟就把烟蒂保存起来&#xff0c;k&#xff08;k>1&#xff09;个烟蒂可以换一个…

Cursor和Hbuilder用5分钟开发微信小程序

分享一个5分钟搞定微信小程序开发的技能&#xff0c;需要用到两个工具&#xff1a;Cursor和Hbuilder。 第1步、下载HBuilder。Hbuilder可以实现一套代码直接生成安卓、苹果、鸿蒙各个平台APP。访问Hbuilder的官方网站&#xff0c;HBuilderX-高效极客技巧&#xff0c;选择适合…

k8s的dashboard

找一个装有docker的机器&#xff0c;在一个rocky linux的虚拟机里弄拉取一个rancher镜像建立一个目录&#xff0c;目的&#xff1a;和里面数据做持久化关联后台运行&#xff0c;让他有权限&#xff0c;8080端口和容器80端口映射&#xff0c;443和443做映射查看一下删掉&#xf…

桥接模式,打造灵活可扩展的日志系统C++

一、为什么用桥接模式在企业开发中&#xff0c;日志系统几乎是标配。常见需求&#xff1a;日志有多种类型&#xff08;Info、Warning、Error 等&#xff09;&#xff1b;日志需要支持多种输出方式&#xff08;控制台输出、写文件、远程上传、数据库存储等&#xff09;。如果把这…

kafka--基础知识点--5.3--producer事务

1 事务简介 Kafka事务是Apache Kafka在流处理场景中实现Exactly-Once语义的核心机制。它允许生产者在跨多个分区和主题的操作中&#xff0c;以原子性&#xff08;Atomicity&#xff09;的方式提交或回滚消息&#xff0c;确保数据处理的最终一致性。例如&#xff0c;在流处理中…

利用DeepSeek实现服务器客户端模式的DuckDB原型

在网上看到韩国公司开发的一款GooseDB&#xff0c;DuckDB™ 的功能扩展分支&#xff0c;具有服务器/客户端、多会话和并发写入支持&#xff0c;使用 PostgreSQL 有线协议&#xff0c;但它是Freeware而不是开源&#xff0c;所以让DeepSeek实现之。 首先把readme页面发给他翻译&a…

麦当劳APP逆向

版本 V 7.0.17.0反调试 梆梆企业加固 frida反调试部分代码 headers {"biz_scenario": "500","biz_from": "1004","User-Agent": "mcdonald_Android/7.0.17.0 (Android)","ct": "102","…

大数据毕业设计选题推荐-基于大数据的结核病数据可视化分析系统-Hadoop-Spark-数据可视化-BigData

✨作者主页&#xff1a;IT毕设梦工厂✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、PHP、.NET、Node.js、GO、微信小程序、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇…

Vue3 视频播放器完整指南 – @videojs-player/vue 从入门到精通

前言 在 Vue 3 生态中&#xff0c;视频播放功能是许多应用的核心需求。videojs-player/vue 是一个专门为 Vue 3 设计的视频播放器组件&#xff0c;基于成熟的 Video.js 库构建&#xff0c;提供了简单而强大的视频播放解决方案。 主要特性 Vue 3 组件化&#xff1a;原生 Vue …