生成,追加csv文件內(nèi)容

package com.yktech.common.util;

import org.apache.commons.io.ByteOrderMark;
import org.apache.commons.lang3.StringUtils;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;


public class CsvUtil {
    /**
     * CSV文件生成方法 字符流追加:FileWriter writer = new FileWriter(file,true)
     *
     * @param headLabel 頭部標簽
     * @param dataList 數(shù)據(jù)列表
     * @param filePath 文件路徑
     * @param addFlag 是否追加
     */
    public static void writeToCsv(String headLabel, List<List<Object>> dataList, String filePath, boolean addFlag) {
        BufferedWriter buffWriter = null;
        try {
            // 根據(jù)指定路徑構(gòu)建文件對象
            File csvFile = new File(filePath);
            // 文件輸出流對象,第二個參數(shù)時boolean類型,為true表示文件追加(在已有的文件中追加內(nèi)容)
            FileWriter writer = new FileWriter(csvFile, addFlag);
            // 構(gòu)建緩存字符輸出流(不推薦使用OutputStreamWriter)
            buffWriter = new BufferedWriter(writer, 1024);
            // excel文件需要通過文件頭的bom來識別編碼,而CSV文件格式不自帶bom,所以寫文件時,需要先寫入bom頭,否則excel打開亂碼
            buffWriter.write(new String(ByteOrderMark.UTF_8.getBytes()));

            // 頭部不為空則寫入頭部,并且換行
            if (StringUtils.isNotBlank(headLabel)) {
                buffWriter.write(headLabel);
                buffWriter.newLine();
                // 將varchar加入
                StringBuffer typesb = new StringBuffer();
                String[] types = headLabel.split(",");
                Arrays.stream(types).forEach(str -> {
                    typesb.append("VARCHAR");
                    typesb.append(",");
                });
                buffWriter.write(typesb.toString().substring(0, typesb.toString().length() - 1));
                buffWriter.newLine();
            }
            // 遍歷list
            // 遍歷list
            for (List<Object> rowStr : dataList) {
                // 如果數(shù)據(jù)不為空,則寫入文件內(nèi)容,并且換行
                if (rowStr != null) {
                    StringBuffer strbuffer = new StringBuffer();
                    for (Object o : rowStr) {
                        strbuffer.append(o);
                        strbuffer.append(",");
                    }
                    String rowstr = strbuffer.toString().substring(0, strbuffer.toString().length() - 1);
                    buffWriter.write(rowstr);
                    buffWriter.newLine();// 文件寫完最后一個換行不用處理
                }
            }

            // 刷新流,也就是把緩存中剩余的內(nèi)容輸出到文件
            buffWriter.flush();
        } catch (Exception e) {
            System.out.println("寫入csv出現(xiàn)異常");
            e.printStackTrace();
        } finally {
            try {
                // 關閉流
                if (buffWriter != null) {
                    buffWriter.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }
}

需要引入的jar包

  <commons.version>2.6</commons.version>
 <!-- commons -->
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>${commons.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
        </dependency>
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容