CSV檔案處理工具-CsvUtil
阿新 • • 發佈:2021-10-30
介紹
逗號分隔值(Comma-Separated Values,CSV,有時也稱為字元分隔值,因為分隔字元也可以不是逗號),其檔案以純文字形式儲存表格資料(數字和文字)。
Hutool針對此格式,參考FastCSV專案做了對CSV檔案讀寫的實現(Hutool實現完全獨立,不依賴第三方)
CsvUtil
是CSV工具類,主要封裝了兩個方法:
- getReader 用於對CSV檔案讀取
- getWriter 用於生成CSV檔案
這兩個方法分別獲取CsvReader
物件和CsvWriter
,從而獨立完成CSV檔案的讀寫。
使用
讀取CSV檔案
讀取為CsvRow
CsvReader reader = CsvUtil.getReader(); //從檔案中讀取CSV資料 CsvData data = reader.read(FileUtil.file("test.csv")); List<CsvRow> rows = data.getRows(); //遍歷行 for (CsvRow csvRow : rows) { //getRawList返回一個List列表,列表的每一項為CSV中的一個單元格(既逗號分隔部分) Console.log(csvRow.getRawList()); }
CsvRow
物件還記錄了一些其他資訊,包括原始行號等。
讀取為Bean列表
首先測試的CSV:test_bean.csv
:
姓名,gender,focus,age
張三,男,無,33
李四,男,好物件,23
王妹妹,女,特別關注,22
- 定義Bean:
// lombok註解 @Data private static class TestBean{ // 如果csv中標題與欄位不對應,可以使用alias註解設定別名 @Alias("姓名") private String name; private String gender; private String focus; private Integer age; }
- 讀取
final CsvReader reader = CsvUtil.getReader();
//假設csv檔案在classpath目錄下
final List<TestBean> result = reader.read(
ResourceUtil.getUtf8Reader("test_bean.csv"), TestBean.class);
- 輸出:
CsvReaderTest.TestBean(name=張三, gender=男, focus=無, age=33) CsvReaderTest.TestBean(name=李四, gender=男, focus=好物件, age=23) CsvReaderTest.TestBean(name=王妹妹, gender=女, focus=特別關注, age=22)
生成CSV檔案
//指定路徑和編碼
CsvWriter writer = CsvUtil.getWriter("e:/testWrite.csv", CharsetUtil.CHARSET_UTF_8);
//按行寫出
writer.write(
new String[] {"a1", "b1", "c1"},
new String[] {"a2", "b2", "c2"},
new String[] {"a3", "b3", "c3"}
);
效果如下:
注意
CSV檔案本身為一種簡單文字格式,有編碼區分。Excel讀取CSV檔案中含有中文時時必須為GBK編碼(Windows平臺下),否則會出現亂碼。