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文件處理工具-CsvUtil

注意
CSV文件本身為一種簡單文本格式,有編碼區分。Excel讀取CSV文件中含有中文時時必須為GBK編碼(Windows平台下),否則會出現亂碼。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM