package com.cwp.utils;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.CharsetUtil;
import org.apache.commons.lang3.StringUtils;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
public class MyCsvUtil {
/**
* CSV文件生成方法 字符流追加:FileWriter writer = new FileWriter(file,true)
*
* @param headLabel 头部标签
* @param dataList 数据列表
* @param csvFile 文件
* @param addFlag 是否追加
*/
public static void writeToCsv(String headLabel, List<String> dataList, File csvFile, boolean addFlag) {
BufferedWriter buffWriter = null;
try {
//文件输出流对象,第二个参数时boolean类型,为true表示文件追加(在已有的文件中追加内容)
/* FileWriter writer = new FileWriter(csvFile, addFlag);*/
buffWriter = FileUtil.getWriter(csvFile, CharsetUtil.CHARSET_GBK,addFlag);
//构建缓存字符输出流(不推荐使用OutputStreamWriter)
/* buffWriter = new BufferedWriter(writer, 1024);*/
//头部不为空则写入头部,并且换行
if (StringUtils.isNotBlank(headLabel)) {
buffWriter.write(headLabel);
buffWriter.newLine();
}
//遍历list
for (String rowStr : dataList) {
//如果数据不为空,则写入文件内容,并且换行
if (StringUtils.isNotBlank(rowStr)) {
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();
}
}
}
/**
* 根据文件路径读取csv文件的内容
*
* @param filePath
* @return
*/
public static List<String> readFromCsv(String filePath) {
ArrayList<String> dataList = new ArrayList<>();
BufferedReader buffReader = null;
try {
//构建文件对象
File csvFile = new File(filePath);
//判断文件是否存在
if (!csvFile.exists()) {
System.out.println("文件不存在");
return dataList;
}
//构建字符输入流
buffReader = FileUtil.getReader(csvFile, CharsetUtil.CHARSET_GBK);
/* FileReader fileReader = new FileReader(csvFile);*/
//构建缓存字符输入流
/* buffReader = new BufferedReader(fileReader);*/
String line = "";
//根据合适的换行符来读取一行数据,赋值给line
while ((line = buffReader.readLine()) != null) {
if (StringUtils.isNotBlank(line)) {
//数据不为空则加入列表
dataList.add(line);
}
}
} catch (Exception e) {
System.out.println("读取csv文件发生异常");
e.printStackTrace();
} finally {
try {
//关闭流
if (buffReader != null) {
buffReader.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return dataList;
}
private static void appendToCsvExample() {
String csvfile = "E:\\csv\\对账文件20211111.csv";
File csvFile=new File(csvfile);
List<String> dataList = new ArrayList<>();
dataList.add("190469730006,100011,4000,4000,0,105000041112608,01,00,2021-09-12 16:52:57,8");
dataList.add("190469730173,100011,4000,4000,0,105000041112608,01,00,2021-09-12 16:53:54,8");
dataList.add("190469730367,100011,4000,4000,0,105000041112608,01,00,2021-09-12 16:54:50,8");
dataList.add("190469736543,100011,4000,4000,0,105000041112608,01,00,2021-09-12 17:25:53,8");
dataList.add("190469746558,100011,4000,4000,0,105000041112608,01,00,2021-09-12 18:14:13,8");
MyCsvUtil.writeToCsv("", dataList, csvFile, true);
}
private static void writeToCsvExample() {
String headDataStr = "交易流水,商户编号,订单金额,支付金额,优惠金额,收款账户,支付方式,支付状态,支付时间,交易类型";
String csvfile = "E:\\csv\\对账文件20211111.csv";
List<String> dataList = new ArrayList<>();
File csvFile=new File(csvfile);
/* dataList.add("190469644375,100011,4000,4000,0,105000041112608,03,00,2021-09-12 07:44:12,8");
dataList.add("190469644954,100011,4000,4000,0,105000041112608,03,00,2021-09-12 07:50:10,8");
dataList.add("190469645620,100011,4000,4000,0,105000041112608,03,00,2021-09-12 07:56:59,8");
dataList.add("190469661593,100011,2000,2000,0,105000041112608,01,00,2021-09-12 09:51:24,8");
dataList.add("190469661738,100011,2000,2000,0,105000041112608,01,00,2021-09-12 09:52:15,8");
dataList.add("190469661853,100011,2000,2000,0,105000041112608,01,00,2021-09-12 09:52:51,8");
dataList.add("190469661931,100011,2000,2000,0,105000041112608,01,00,2021-09-12 09:53:27,8");
dataList.add("190469699471,100011,2000,2000,0,105000041112608,03,00,2021-09-12 13:59:02,8");
dataList.add("190469699540,100011,2000,2000,0,105000041112608,03,00,2021-09-12 13:59:29,8");
dataList.add("190469712840,100011,4000,4000,0,105000041112608,03,00,2021-09-12 15:20:32,8");*/
MyCsvUtil.writeToCsv(headDataStr, dataList, csvFile, false);
}
private static void readFromCsvExample() {
String csvFilePath = "E:\\csv\\对账文件20211111.csv";
List<String> list = MyCsvUtil.readFromCsv(csvFilePath);
for (String data : list) {
System.out.println(data);
}
}
public static void main(String[] args) {
writeToCsvExample();
appendToCsvExample();
readFromCsvExample();
}
}
csv工具类
于 2021-12-05 16:59:18 首次发布