From e8a8c81489bdc26da58e6bcfd9575cbbc92038d9 Mon Sep 17 00:00:00 2001 From: fzg Date: Mon, 20 May 2024 20:58:59 +0800 Subject: [PATCH] =?UTF-8?q?CsvWriter=20=E9=87=8D=E8=BD=BD=E4=B8=80?= =?UTF-8?q?=E4=B8=AA=20writeBeans=20=E6=96=B9=E6=B3=95=EF=BC=8C=E8=AF=A5?= =?UTF-8?q?=E6=96=B9=E6=B3=95=E5=8F=AF=E4=BB=A5=E6=8C=87=E5=AE=9A=E5=AF=BC?= =?UTF-8?q?=E5=87=BA=20Bean=20=E4=B8=AD=E7=9A=84=E9=83=A8=E5=88=86?= =?UTF-8?q?=E5=B1=9E=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/hutool/core/text/csv/CsvWriter.java | 24 +++++++++++++ .../cn/hutool/core/text/csv/CsvUtilTest.java | 35 +++++++++++++++++++ 2 files changed, 59 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 314249103..8755d78b6 100755 --- 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 @@ -252,6 +252,30 @@ public final class CsvWriter implements Closeable, Flushable, Serializable { return this; } + /** + * 将一个Bean集合写出到Writer,并自动生成表头 + * + * @param beans Bean集合 + * @param properties Bean 中指定的可以导出的属性 + * @return this + */ + public CsvWriter writeBeans(Iterable beans, String... properties) { + if (CollUtil.isNotEmpty(beans)) { + boolean isFirst = true; + Map map; + for (Object bean : beans) { + map = BeanUtil.beanToMap(bean, properties); + if (isFirst) { + writeHeaderLine(map.keySet().toArray(new String[0])); + isFirst = false; + } + writeLine(Convert.toStrArray(map.values())); + } + flush(); + } + 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 bad09cdd9..24438045a 100755 --- 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 @@ -136,6 +136,41 @@ public class CsvUtilTest { writer.close(); } + @Test + @Ignore + public void writeBeansWithPropertiesTest() { + + @Data + class Student { + Integer id; + String name; + Integer age; + } + + String path = FileUtil.isWindows() ? "d:/test/testWriteBeans.csv" : "~/tmp/testWriteBeans.csv"; + CsvWriter writer = CsvUtil.getWriter(path, CharsetUtil.CHARSET_UTF_8); + List students = new ArrayList<>(); + Student student1 = new Student(); + student1.setId(1); + student1.setName("张三"); + student1.setAge(18); + + Student student2 = new Student(); + student2.setId(2); + student2.setName("李四"); + student2.setAge(22); + + Student student3 = new Student(); + student3.setId(3); + student3.setName("王五"); + student3.setAge(31); + + students.add(student1); + students.add(student2); + students.add(student3); + writer.writeBeans(students,"name","age"); + writer.close(); + } @Test @Ignore public void readLfTest(){