import cn.hutool.core.io.FileUtil;
import cn.hutool.core.io.IORuntimeException;
import cn.hutool.core.text.csv.*;
import cn.hutool.core.util.CharsetUtil;
import lombok.extern.slf4j.Slf4j;
import java.io.*;
import java.util.Collection;
import java.util.List;
/**
*
*/
@Slf4j
public class CsvUtils {
private static final String SUFFIX = ".csv";
public static final String MKDIRS = "qpdoc";
/**
* CSV文件生成方法
*
* @param head
* @param dataList
* @return
*/
public static InputStream createCSVFile(List<Object> head, List<List<Object>> dataList) {
BufferedWriter csvWtriter = null;
// 返回流 可以自己更改为文件流的形式,下载到本地
ByteArrayInputStream byteArrayInputStream = null;
// 创建文件流的形式
// File file=null;
// new File("");
// file= file.getParentFile();
// if (file!=null&&!file.exists()){
// file.mkdirs();
// }
// file.createNewFile();
try {
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
// GB2312使正确读取分隔符","
// 如果生产文件乱码,windows下用gbk,linux用UTF-8
csvWtriter = new BufferedWriter(new OutputStreamWriter(outputStream, “GB2312”), 1024);
// 写入文件头部
writeRow(head, csvWtriter);
// 写入文件内容
for (List row : dataList) {
writeRow(row, csvWtriter);
}
csvWtriter.flush();
byteArrayInputStream = new ByteArrayInputStream(outputStream.toByteArray());
} catch (IOException e) {
throw new BusinessException(e.getMessage());
} finally {
try {
assert csvWtriter != null;
csvWtriter.close();
assert byteArrayInputStream != null;
byteArrayInputStream.close();
} catch (IOException e) {
throw new BusinessException(e.getMessage());
}
}
return byteArrayInputStream;
}
/**
* 写一行数据方法
*
* @param row
* @param csvWriter
* @throws IOException
*/
private static void writeRow(List<Object> row, BufferedWriter csvWriter) throws IOException {
// 写入文件头部
for (Object data : row) {
String rowStr = "\"" + data + "\",";
csvWriter.write(rowStr);
}
csvWriter.newLine();
}
/**
* 通过地址读
*
* @param filePath
*/
public static void readCSV(String filePath) {
CsvReader reader = CsvUtil.getReader();
//从文件中读取CSV数据
CsvData data = reader.read(FileUtil.file(filePath));
List<CsvRow> rows = data.getRows();
//遍历行
for (CsvRow csvRow : rows) {
//getRawList返回一个List列表,列表的每一项为CSV中的一个单元格(既逗号分隔部分)
System.out.println(csvRow.getRawList());
}
}
/**
* 导出excle
*
* @param filePath
* @param lines
*/
public static void writeCSV(String filePath, Collection<String[]> lines) {
//指定路径和编码
CsvWriter writer = null;
try {
writer = CsvUtil.getWriter(filePath + ".csv", CharsetUtil.CHARSET_GBK);
//按行写出
writer.write(lines);
} catch (IORuntimeException e) {
e.printStackTrace();
} finally {
assert writer != null;
writer.close();
}
}
}