1. 程式人生 > 其它 >CSV檔案處理工具-CsvUtil

CSV檔案處理工具-CsvUtil

介紹

逗號分隔值(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
  1. 定義Bean:
// lombok註解
@Data
private static class TestBean{
    // 如果csv中標題與欄位不對應,可以使用alias註解設定別名
    @Alias("姓名")
    private String name;
    private String gender;
    private String focus;
    private Integer age;
}
  1. 讀取
final CsvReader reader = CsvUtil.getReader();
//假設csv檔案在classpath目錄下
final List<TestBean> result = reader.read(
                ResourceUtil.getUtf8Reader("test_bean.csv"), TestBean.class);
  1. 輸出:
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平臺下),否則會出現亂碼。