From 1029bc74f2554feeb899397761d9ca54e8437939 Mon Sep 17 00:00:00 2001 From: mawanli Date: Wed, 23 Jun 2021 11:28:20 +0800 Subject: [PATCH] =?UTF-8?q?1.[=E6=96=B0=E7=89=B9=E6=80=A7]=20CsvWriter?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0writeBeans=E6=96=B9=E6=B3=95=EF=BC=8C?= =?UTF-8?q?=E6=A0=B9=E6=8D=AEBean=E8=87=AA=E5=8A=A8=E7=94=9F=E6=88=90?= =?UTF-8?q?=E8=A1=A8=E5=A4=B4=EF=BC=8C=E5=B9=B6=E5=86=99=E5=85=A5=E6=95=B0?= =?UTF-8?q?=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/hutool/core/text/csv/CsvWriter.java | 23 ++++++++ .../cn/hutool/core/text/csv/CsvUtilTest.java | 56 +++++++++++++++++++ 2 files changed, 79 insertions(+) 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(){