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() | 獲取一行的數據為數組 |