!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
*/
public CsvData(final List<String> header, final List<CsvRow> rows) {

View File

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

View File

@ -207,6 +207,25 @@ public final class CsvWriter implements Closeable, Flushable, Serializable {
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并自动生成表头
*

View File

@ -7,6 +7,10 @@ import cn.hutool.core.io.IoUtil;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
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.Reader;
import java.io.StringWriter;
@ -30,6 +34,12 @@ public class JAXBUtil {
/**
* 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对象
* @return 输出的XML字符串
*/

View File

@ -1,15 +1,18 @@
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.lang.Console;
import cn.hutool.core.util.CharsetUtil;
import lombok.AllArgsConstructor;
import lombok.Data;
import org.junit.Assert;
import org.junit.Ignore;
import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
import java.util.*;
import java.util.stream.Collectors;
public class CsvUtilTest {
@ -48,13 +51,15 @@ public class CsvUtilTest {
@Ignore
public void readTest3() {
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
@Ignore
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(
new String[] {"a1", "b1", "c1", "123345346456745756756785656"},
new String[] {"a2", "b2", "c2"},
@ -73,7 +78,8 @@ public class CsvUtilTest {
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<>();
Student student1 = new Student();
student1.setId(1);
@ -101,7 +107,8 @@ public class CsvUtilTest {
@Ignore
public void readLfTest(){
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) {
Console.log(row);
}
@ -121,7 +128,47 @@ public class CsvUtilTest {
list.add(1);
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);
}
@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 {
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_name>西安市第一中学</school_name>\n" +
" <school_address>西安市雁塔区长安堡一号</school_address>\n" +

View File

@ -197,6 +197,15 @@ public class XmlUtilTest {
@Test
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();
testBean.setReqCode("1111");
testBean.setAccountName("账户名称");
@ -217,6 +226,11 @@ public class XmlUtilTest {
@Test
public void xmlToBeanTest2(){
@Data
class SmsRes {
private String code;
}
//issue#1663@Github
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());
}
@Data
static class SmsRes {
private String code;
}
@Test
public void cleanCommentTest() {
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);
}
@Data
public static class TestBean {
private String ReqCode;
private String AccountName;
private String Operator;
private String ProjectCode;
private String BankCode;
}
@Test
@Ignore
public void formatTest(){