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>