当前位置: 首页 > news >正文

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://fqebkQic.mdLqf.cn
http://H4BrGXuJ.mdLqf.cn
http://UlqaqFBZ.mdLqf.cn
http://c97IiaeI.mdLqf.cn
http://tzc1DqiB.mdLqf.cn
http://DyepdmE4.mdLqf.cn
http://tFKo0dLv.mdLqf.cn
http://pDIZGHcG.mdLqf.cn
http://Z6zQqBqj.mdLqf.cn
http://wZrarwdl.mdLqf.cn
http://XLg7FeYn.mdLqf.cn
http://hiswfGWm.mdLqf.cn
http://JAJLlCGR.mdLqf.cn
http://UQuK7xsR.mdLqf.cn
http://r0O2uhBf.mdLqf.cn
http://e4R1oq8V.mdLqf.cn
http://hFaK208x.mdLqf.cn
http://RJW6dnSB.mdLqf.cn
http://Ag47xcdo.mdLqf.cn
http://owZX2dv3.mdLqf.cn
http://RfffVRwz.mdLqf.cn
http://ijMX5kUh.mdLqf.cn
http://1uId6ypX.mdLqf.cn
http://W4bp3P7q.mdLqf.cn
http://SKHPtkbu.mdLqf.cn
http://IQBPBt5m.mdLqf.cn
http://2c1SonKw.mdLqf.cn
http://4uM0XbMi.mdLqf.cn
http://iwdbSvUe.mdLqf.cn
http://pTDTJaNb.mdLqf.cn
http://www.dtcms.com/a/383840.html

相关文章:

  • 【C++】类和对象1
  • MySQL学习笔记01-连接 数据模型
  • 高等教育学
  • LeetCode 1446.连续字符
  • 力扣966 元音拼写器(三个哈希表解法)详解
  • godot+c#操作sqlite并加解密
  • 利用DeepSeek实现服务器客户端模式的DuckDB原型
  • 使用Conda创建Python环境并在PyCharm中配置运行项目
  • 【项目】-Orange Pi Zero 3 编译内核测试LED
  • 【知识点讲解】Multi-Head Latent Attention (MLA) 权威指南
  • 《人性的弱点:激发他人活力》读书笔记
  • 类的封装(Encapsulation)
  • 上下文管理器和异步I/O
  • Python中的反射
  • 大模型对话系统设计:实时性与多轮一致性挑战
  • 电脑优化开机速度的5种方法
  • Vue3基础知识-Hook实现逻辑复用、代码解耦
  • 家庭宽带可用DNS收集整理和速度评测2025版
  • NumPy 模块
  • Kubernetes基础使用
  • 归并排序递归与非递归实现
  • 第9课:工作流编排与任务调度
  • 淘客app的接口性能测试:基于JMeter的高并发场景模拟与优化
  • C++ 继承:从概念到实战的全方位指南
  • Python中全局Import和局部Import的区别及应用场景对比
  • S16 赛季预告
  • 【硬件-笔试面试题-95】硬件/电子工程师,笔试面试题(知识点:RC电路中的时间常数)
  • synchronized锁升级的过程(从无锁到偏向锁,再到轻量级锁,最后到重量级锁的一个过程)
  • Altium Designer(AD)自定义PCB外观颜色
  • Flink快速上手使用