1.[新特性] CsvWriter添加writeBeans方法,根据Bean自动生成表头,并写入数据

This commit is contained in:
mawanli 2021-06-23 11:28:20 +08:00
parent a97e967ecd
commit 1029bc74f2
2 changed files with 79 additions and 0 deletions

View File

@ -1,5 +1,6 @@
package cn.hutool.core.text.csv;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.io.FileUtil;
@ -18,7 +19,10 @@ import java.io.IOException;
import java.io.Serializable;
import java.io.Writer;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.stream.Collectors;
/**
* CSV数据写出器
@ -205,6 +209,25 @@ public final class CsvWriter implements Closeable, Flushable, Serializable {
return this;
}
/**
* 将一个Bean集合写出到Writer并自动生成表头
*
* @param beans Bean集合
* @return this
*/
public CsvWriter writeBeans(Collection<?> beans) {
if (CollUtil.isNotEmpty(beans)) {
List<Collection<Object>> res = new ArrayList<>();
for (Object bean : beans) {
res.add(BeanUtil.beanToMap(bean).keySet().stream().map(k -> (Object) k).collect(Collectors.toList()));
break;
}
res.addAll(beans.stream().map(bean -> BeanUtil.beanToMap(bean).values()).collect(Collectors.toList()));
write(res);
}
return this;
}
/**
* 写出一行
*

View File

@ -61,6 +61,62 @@ public class CsvUtilTest {
);
}
@Test
@Ignore
public void writeBeansTest() {
class Student {
Integer id;
String name;
Integer age;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
CsvWriter writer = CsvUtil.getWriter("d:/test/testWriteBeans.csv", CharsetUtil.CHARSET_UTF_8);
List<Student> students = new ArrayList<>();
Student student1 = new Student();
Student student2 = new Student();
Student student3 = new Student();
student1.setId(1);
student1.setName("张三");
student1.setAge(18);
student2.setId(2);
student2.setName("李四");
student2.setAge(22);
student3.setId(3);
student3.setName("王五");
student3.setAge(31);
students.add(student1);
students.add(student2);
students.add(student3);
writer.writeBeans(students);
}
@Test
@Ignore
public void readLfTest(){