Java 徒手導出csv文件

導述

平常程序中導出csv都是採用第三方工具包,使用第三方工具包可以很方便的導出,但前提是項目中需要加入一個新的依賴。在某些情況下,只是簡單的導出csv,不希望增加項目依賴。那就看下如何直接寫出csv文件吧

在寫出csv前,我們首先要了解csv格式。

csv 格式簡介

逗號分隔值(Comma-Separated Values,CSV,有時也稱爲字符分隔值,因爲分隔字符也可以不是逗號),其文件以純文本形式存儲表格數據(數字和文本)。純文本意味着該文件是一個字符序列,不含必須像二進制數字那樣被解讀的數據。CSV文件由任意數目的記錄組成,記錄間以某種換行符分隔;每條記錄由字段組成,字段間的分隔符是其它字符或字符串,最常見的是逗號或製表符。通常,所有記錄都有完全相同的字段序列。通常都是純文本文件。

 

Java 徒手導出csv文件

 

 

流輸出:PrintWriter

java 中流類圖

 

Java 徒手導出csv文件

 

 

PrintWriter 是字符類型的打印輸出流,它繼承於Writer。

 

代碼實現

實現邏輯主要分爲:

  1. 處理每行的特殊格式字符。
  2. 每個屬性之間添加逗號分隔。
  3. 輸出
 /**
     * 寫出到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格式防止中文亂碼

 

總結

經常爲了避免重複造輪子,使用了很多便利的工具。但使用輪子的前提是,自己能創造輪子。尤其是編程基礎,輪子用的太多,自己不會走了,就比較尷尬。

基礎編程屬於通過練習的方式嘗試,偶爾跑掉輪子,試試自己還能跑起來不。

爲方便交流,可以加個關注吆!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章