diff --git a/hutool-core/src/main/java/cn/hutool/core/text/csv/CsvWriter.java b/hutool-core/src/main/java/cn/hutool/core/text/csv/CsvWriter.java index 60d27685b..d55e25b7f 100644 --- a/hutool-core/src/main/java/cn/hutool/core/text/csv/CsvWriter.java +++ b/hutool-core/src/main/java/cn/hutool/core/text/csv/CsvWriter.java @@ -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> 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; + } + /** * 写出一行 * diff --git a/hutool-core/src/test/java/cn/hutool/core/text/csv/CsvUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/text/csv/CsvUtilTest.java index 515f16707..1763061cd 100644 --- a/hutool-core/src/test/java/cn/hutool/core/text/csv/CsvUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/text/csv/CsvUtilTest.java @@ -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 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(){