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
英文地址,請注明出處:http://en.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 …