commons-csv

发布于:2025-09-15 ⋅ 阅读:(13) ⋅ 点赞:(0)

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,允许空行
EXCEL Excel 格式,使用逗号作为字段分隔符,双引号作为文本限定符,换行符使用 CRLF,允许空行
INFORMIX_UNLOAD Informix 数据库导出格式,使用管道符号作为字段分隔符,单引号作为文本限定符,换行符使用系统默认的换行符。
INFORMIX_UNLOAD_CSV Informix 数据库导出 CSV 格式,使用逗号作为字段分隔符,单引号作为文本限定符,换行符使用系统默认的换行符。
MONGODB_CSV MongoDB 导出 CSV 格式,使用逗号作为字段分隔符,双引号作为文本限定符,换行符使用 LF。
MONGODB_TSV MongoDB 导出 TSV 格式,使用制表符作为字段分隔符,双引号作为文本限定符,换行符使用 LF。
MYSQL MySQL 导出 CSV 格式,使用逗号作为字段分隔符,双引号作为文本限定符,换行符使用 LF。
ORACLE Oracle 数据库导出格式,使用逗号作为字段分隔符,双引号作为文本限定符,换行符使用 CRLF。
POSTGRESQL_CSV PostgreSQL 导出 CSV 格式,使用逗号作为字段分隔符,双引号作为文本限定符,换行符使用 LF。
POSTGRESQL_TEXT PostgreSQL 导出文本格式,使用制表符作为字段分隔符,双引号作为文本限定符,换行符使用 CRLF。
RFC4180 符合 RFC4180 标准的 CSV 格式,使用逗号作为字段分隔符,双引号作为文本限定符,换行符使用 CRLF。
TDF Tab-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() 获取一行的数据为数组