!353 CsvWriter 增加 writer.write(csvData)的方法重载;

Merge pull request !353 from dazer007/v5-dev
This commit is contained in:
Looly 2021-07-02 03:26:34 +00:00 committed by Gitee
commit 2b4311aca0
7 changed files with 100 additions and 25 deletions

View File

@ -19,7 +19,7 @@ public class CsvData implements Iterable<CsvRow>, Serializable {
/** /**
* 构造 * 构造
* *
* @param header 头信息 * @param header 头信息, 可以为null
* @param rows * @param rows
*/ */
public CsvData(final List<String> header, final List<CsvRow> rows) { public CsvData(final List<String> header, final List<CsvRow> rows) {

View File

@ -17,7 +17,7 @@ public class CsvUtil {
/** /**
* 获取CSV读取器 * 获取CSV读取器
* *
* @param config 配置 * @param config 配置, 允许为空.
* @return {@link CsvReader} * @return {@link CsvReader}
*/ */
public static CsvReader getReader(CsvReadConfig config) { public static CsvReader getReader(CsvReadConfig config) {

View File

@ -207,6 +207,25 @@ public final class CsvWriter implements Closeable, Flushable, Serializable {
return this; return this;
} }
/**
* 将一个 CsvData 集合写出到Writer
*
* @param csvData CsvData
* @return this
*/
public CsvWriter write(CsvData csvData) {
if (csvData != null) {
// 1写header
if (CollUtil.isNotEmpty(csvData.getHeader())) {
this.writeLine(csvData.getHeader().toArray(new String[0]));
}
// 2写内容
this.write(csvData.getRows());
flush();
}
return this;
}
/** /**
* 将一个Bean集合写出到Writer并自动生成表头 * 将一个Bean集合写出到Writer并自动生成表头
* *

View File

@ -7,6 +7,10 @@ import cn.hutool.core.io.IoUtil;
import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller; import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller; import javax.xml.bind.Unmarshaller;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;
import java.io.File; import java.io.File;
import java.io.Reader; import java.io.Reader;
import java.io.StringWriter; import java.io.StringWriter;
@ -30,6 +34,12 @@ public class JAXBUtil {
/** /**
* JavaBean转换成xml * JavaBean转换成xml
* *
* bean上面用的常用注解
* @see XmlRootElement <code>@XmlRootElement(name = "school")</code>
* @see XmlElement <code>@XmlElement(name = "school_name", required = true)</code>
* @see XmlElementWrapper <code>@XmlElementWrapper(name="schools")</code>
* @see XmlTransient JAXB "有两个名为 "**" 的属性,类的两个属性具有相同名称 "**""解决方案
*
* @param bean Bean对象 * @param bean Bean对象
* @return 输出的XML字符串 * @return 输出的XML字符串
*/ */

View File

@ -1,15 +1,18 @@
package cn.hutool.core.text.csv; package cn.hutool.core.text.csv;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.FileUtil;
import cn.hutool.core.lang.Console; import cn.hutool.core.lang.Console;
import cn.hutool.core.util.CharsetUtil; import cn.hutool.core.util.CharsetUtil;
import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import org.junit.Assert; import org.junit.Assert;
import org.junit.Ignore; import org.junit.Ignore;
import org.junit.Test; import org.junit.Test;
import java.util.ArrayList; import java.util.*;
import java.util.List; import java.util.stream.Collectors;
public class CsvUtilTest { public class CsvUtilTest {
@ -48,13 +51,15 @@ public class CsvUtilTest {
@Ignore @Ignore
public void readTest3() { public void readTest3() {
CsvReader reader = CsvUtil.getReader(); CsvReader reader = CsvUtil.getReader();
reader.read(FileUtil.getUtf8Reader("d:/test/test.csv"), Console::log); String path = FileUtil.isWindows() ? "d:/test/test.csv" : "~/test/test.csv";
reader.read(FileUtil.getUtf8Reader(path), Console::log);
} }
@Test @Test
@Ignore @Ignore
public void writeTest() { public void writeTest() {
CsvWriter writer = CsvUtil.getWriter("d:/test/testWrite.csv", CharsetUtil.CHARSET_UTF_8); String path = FileUtil.isWindows() ? "d:/test/testWrite.csv" : "~/test/testWrite.csv";
CsvWriter writer = CsvUtil.getWriter(path, CharsetUtil.CHARSET_UTF_8);
writer.write( writer.write(
new String[] {"a1", "b1", "c1", "123345346456745756756785656"}, new String[] {"a1", "b1", "c1", "123345346456745756756785656"},
new String[] {"a2", "b2", "c2"}, new String[] {"a2", "b2", "c2"},
@ -73,7 +78,8 @@ public class CsvUtilTest {
Integer age; Integer age;
} }
CsvWriter writer = CsvUtil.getWriter("d:/test/testWriteBeans.csv", CharsetUtil.CHARSET_UTF_8); String path = FileUtil.isWindows() ? "d:/test/testWriteBeans.csv" : "~/test/testWriteBeans.csv";
CsvWriter writer = CsvUtil.getWriter(path, CharsetUtil.CHARSET_UTF_8);
List<Student> students = new ArrayList<>(); List<Student> students = new ArrayList<>();
Student student1 = new Student(); Student student1 = new Student();
student1.setId(1); student1.setId(1);
@ -101,7 +107,8 @@ public class CsvUtilTest {
@Ignore @Ignore
public void readLfTest(){ public void readLfTest(){
final CsvReader reader = CsvUtil.getReader(); final CsvReader reader = CsvUtil.getReader();
final CsvData read = reader.read(FileUtil.file("d:/test/rw_test.csv")); String path = FileUtil.isWindows() ? "d:/test/rw_test.csv" : "~/test/rw_test.csv";
final CsvData read = reader.read(FileUtil.file(path));
for (CsvRow row : read) { for (CsvRow row : read) {
Console.log(row); Console.log(row);
} }
@ -121,7 +128,47 @@ public class CsvUtilTest {
list.add(1); list.add(1);
resultList.add(list); resultList.add(list);
final CsvWriter writer = CsvUtil.getWriter("d:/test/csvWrapTest.csv", CharsetUtil.CHARSET_UTF_8); String path = FileUtil.isWindows() ? "d:/test/csvWrapTest.csv" : "~/test/csvWrapTest.csv";
final CsvWriter writer = CsvUtil.getWriter(path, CharsetUtil.CHARSET_UTF_8);
writer.write(resultList); writer.write(resultList);
} }
@Test
@Ignore
public void writeDataTest(){
@Data
@AllArgsConstructor
class User {
Integer userId;
String username;
String mobile;
}
List<String> header = ListUtil.of("用户id", "用户名", "手机号");
List<CsvRow> row = new ArrayList<>();
List<User> datas = new ArrayList<>();
datas.add(new User(1, "张三", "18800001111"));
datas.add(new User(2, "李四", "18800001112"));
datas.add(new User(3, "王五", "18800001113"));
datas.add(new User(4, "赵六", "18800001114"));
//可以为null
//Map<String, Integer> headMap = null;
Map<String, Integer> headMap = new HashMap<>();
headMap.put("userId", 0);
headMap.put("username", 1);
headMap.put("mobile", 2);
for (int i = 0; i < datas.size(); i++) {
User user = datas.get(i);
// row.size() + 1, 表示从第2行开始第一行是标题栏
row.add(new CsvRow(row.size() + 1, headMap, ListUtil.toList(BeanUtil.beanToMap(user).values()).stream().map(Object::toString).collect(Collectors.toList())));
}
CsvData csvData = new CsvData(header, row);
String path = FileUtil.isWindows() ? "d:/test/csvWriteDataTest.csv" : "~/test/csvWriteDataTest.csv";
final CsvWriter writer = CsvUtil.getWriter(path, CharsetUtil.CHARSET_UTF_8);
writer.write(csvData);
}
} }

View File

@ -13,7 +13,7 @@ import javax.xml.bind.annotation.*;
*/ */
public class JAXBUtilTest { public class JAXBUtilTest {
private String xmlStr = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n" + private final String xmlStr = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n" +
"<school>\n" + "<school>\n" +
" <school_name>西安市第一中学</school_name>\n" + " <school_name>西安市第一中学</school_name>\n" +
" <school_address>西安市雁塔区长安堡一号</school_address>\n" + " <school_address>西安市雁塔区长安堡一号</school_address>\n" +

View File

@ -197,6 +197,15 @@ public class XmlUtilTest {
@Test @Test
public void xmlToBeanTest() { public void xmlToBeanTest() {
@Data
class TestBean {
private String ReqCode;
private String AccountName;
private String Operator;
private String ProjectCode;
private String BankCode;
}
final TestBean testBean = new TestBean(); final TestBean testBean = new TestBean();
testBean.setReqCode("1111"); testBean.setReqCode("1111");
testBean.setAccountName("账户名称"); testBean.setAccountName("账户名称");
@ -217,6 +226,11 @@ public class XmlUtilTest {
@Test @Test
public void xmlToBeanTest2(){ public void xmlToBeanTest2(){
@Data
class SmsRes {
private String code;
}
//issue#1663@Github //issue#1663@Github
String xmlStr = "<?xml version=\"1.0\" encoding=\"gbk\" ?><response><code>02</code></response>"; String xmlStr = "<?xml version=\"1.0\" encoding=\"gbk\" ?><response><code>02</code></response>";
@ -233,11 +247,6 @@ public class XmlUtilTest {
Assert.assertEquals(res.toString(), res1.toString()); Assert.assertEquals(res.toString(), res1.toString());
} }
@Data
static class SmsRes {
private String code;
}
@Test @Test
public void cleanCommentTest() { public void cleanCommentTest() {
final String xmlContent = "<info><title>hutool</title><!-- 这是注释 --><lang>java</lang></info>"; final String xmlContent = "<info><title>hutool</title><!-- 这是注释 --><lang>java</lang></info>";
@ -245,16 +254,6 @@ public class XmlUtilTest {
Assert.assertEquals("<info><title>hutool</title><lang>java</lang></info>", ret); Assert.assertEquals("<info><title>hutool</title><lang>java</lang></info>", ret);
} }
@Data
public static class TestBean {
private String ReqCode;
private String AccountName;
private String Operator;
private String ProjectCode;
private String BankCode;
}
@Test @Test
@Ignore @Ignore
public void formatTest(){ public void formatTest(){