美文网首页
生成,追加csv文件内容

生成,追加csv文件内容

作者: jia々 | 来源:发表于2022-05-11 17:01 被阅读0次
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 数据列表
     * @param filePath 文件路径
     * @param addFlag 是否追加
     */
    public static void writeToCsv(String headLabel, List<List<Object>> dataList, String filePath, boolean addFlag) {
        BufferedWriter buffWriter = null;
        try {
            // 根据指定路径构建文件对象
            File csvFile = new File(filePath);
            // 文件输出流对象,第二个参数时boolean类型,为true表示文件追加(在已有的文件中追加内容)
            FileWriter writer = new FileWriter(csvFile, addFlag);
            // 构建缓存字符输出流(不推荐使用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) {
                // 如果数据不为空,则写入文件内容,并且换行
                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();// 文件写完最后一个换行不用处理
                }
            }

            // 刷新流,也就是把缓存中剩余的内容输出到文件
            buffWriter.flush();
        } catch (Exception e) {
            System.out.println("写入csv出现异常");
            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>

相关文章

网友评论

      本文标题:生成,追加csv文件内容

      本文链接:https://www.haomeiwen.com/subject/ywzdurtx.html