maven依赖:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-csv</artifactId>
<version>1.6</version>
</dependency>
不含表头
/**
* 写入data到csv文件,不含表头
* 文件名必须为csv结尾
* @param data List<Object[]>
* @param targetCSVFileName 文件名必须以csv结尾 例如*.csv
* @return file
*/
public static File writeCsv(List<Object[]> data, String targetCSVFileName) {
//初始化csvformat
CSVFormat format = CSVFormat.DEFAULT.withIgnoreHeaderCase();
CSVPrinter printer = null;
try {
File f = new File(targetCSVFileName);
//根据路径创建文件,并设置编码格式
FileOutputStream fos = new FileOutputStream(f);
OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8");
//创建CSVPrinter对象
printer = new CSVPrinter(osw, format);
if (data != null) {
//循环写入数据
for (Object[] lineData : data) {
printer.printRecord(lineData);
}
}
printer.flush();
return f;
} catch (IOException e) {
e.printStackTrace();
logger.error("writeToCsvException", e);
} finally {
if (printer != null) {
try {
printer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return null;
}
测试:
ublic static void main(String[] args) {
List<Object[]> data = new ArrayList<>();
for(int i = 0; i<10; i++){
Object[] arr = new Object[4];
arr[0] = "VIRTUAL" + i;
arr[1] = 0.6666;
arr[2] = 160.00;
arr[3] = "2020-06-13";
data.add(arr);
}
writeCsv(data, UUID.randomUUID().toString() + ".csv");
}
生成文件格式:
java list转csv文件,文件在对应项目根目录下
## 含有表头:
//含有表头,文件名要以csv结尾
public static File writeCsvWithHeads(String[] headers, List<Object[]> data, String targetCSVFileName) {
//初始化csvformat
CSVFormat format = CSVFormat.DEFAULT.withHeader(headers);
CSVPrinter printer = null;
try {
File f = new File(targetCSVFileName);
//根据路径创建文件,并设置编码格式
FileOutputStream fos = new FileOutputStream(f);
OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8");
//创建CSVPrinter对象
printer = new CSVPrinter(osw, format);
if (data != null) {
//循环写入数据
for (Object[] lineData : data) {
printer.printRecord(lineData);
}
}
printer.flush();
return f;
} catch (IOException e) {
e.printStackTrace();
logger.error("xxx" + "writeToCsvException", e);
} finally {
if (printer != null) {
try {
printer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return null;
}
测试:
public static void main(String[] args) {
List<Object[]> data = new ArrayList<>();
for(int i = 0; i<10; i++){
Object[] arr = new Object[4];
arr[0] = "VIRTUAL" + i;
arr[1] = 0.6666;
arr[2] = 160.00;
arr[3] = "2020-06-13";
data.add(arr);
}
String[] headers = new String[4];
headers[0] = "字符串";
headers[1] = "小数";
headers[2] = "小数1";
headers[3] = "日期";
writeCsvWithHeads(headers, data, UUID.randomUUID().toString() + ".csv");
}
测试结果: