導述
平常程式中導出csv都是采用第三方工具包,使用第三方工具包可以很友善的導出,但前提是項目中需要加入一個新的依賴。在某些情況下,隻是簡單的導出csv,不希望增加項目依賴。那就看下如何直接寫出csv檔案吧
在寫出csv前,我們首先要了解csv格式。
csv 格式簡介
逗号分隔值(Comma-Separated Values,CSV,有時也稱為字元分隔值,因為分隔字元也可以不是逗号),其檔案以純文字形式存儲表格資料(數字和文本)。純文字意味着該檔案是一個字元序列,不含必須像二進制數字那樣被解讀的資料。CSV檔案由任意數目的記錄組成,記錄間以某種換行符分隔;每條記錄由字段組成,字段間的分隔符是其它字元或字元串,最常見的是逗号或制表符。通常,所有記錄都有完全相同的字段序列。通常都是純文字檔案。
流輸出:PrintWriter
java 中流類圖
PrintWriter 是字元類型的列印輸出流,它繼承于Writer。
代碼實作
實作邏輯主要分為:
- 處理每行的特殊格式字元。
- 每個屬性之間添加逗号分隔。
- 輸出
/**
* 寫出到csv檔案
* @param csvFileName
* @param data
* @throws FileNotFoundException
*/
public void wirterCsv(String csvFileName, List<String[]> data)
throws FileNotFoundException, UnsupportedEncodingException {
File csvOutputFile = new File(csvFileName);
try (PrintWriter pw = new PrintWriter(csvOutputFile, "GBK")) {
data.stream()
.map(this::convertToCSV)
.forEach(pw::println);
}
}
public String convertToCSV(String[] data) {
return Stream.of(data)
.map(this::escapeSpecialCharacters)
.collect(Collectors.joining(","));
}
public String escapeSpecialCharacters(String data) {
String escapedData = data.replaceAll("R", " ");
if (data.contains(",") || data.contains(""") || data.contains("'")) {
data = data.replace(""", """");
escapedData = """ + data + """;
}
return escapedData;
}
在寫出過程中,要留意亂碼問題,本文設定為GBK格式防止中文亂碼
總結
經常為了避免重複造輪子,使用了很多便利的工具。但使用輪子的前提是,自己能創造輪子。尤其是程式設計基礎,輪子用的太多,自己不會走了,就比較尴尬。
基礎程式設計屬于通過練習的方式嘗試,偶爾跑掉輪子,試試自己還能跑起來不。
為友善交流,可以加個關注吆!