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>