mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-05-09 23:51:34 +08:00
commit
80898f74f4
@ -10,6 +10,7 @@ import cn.hutool.core.util.ObjectUtil;
|
|||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.Reader;
|
import java.io.Reader;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
import java.io.StringReader;
|
||||||
import java.nio.charset.Charset;
|
import java.nio.charset.Charset;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@ -108,6 +109,25 @@ public class CsvBaseReader implements Serializable {
|
|||||||
return read(file, DEFAULT_CHARSET);
|
return read(file, DEFAULT_CHARSET);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 从字符串中读取CSV数据
|
||||||
|
* @param csvStr CSV字符串
|
||||||
|
* @return {@link CsvData},包含数据列表和行信息
|
||||||
|
*/
|
||||||
|
public CsvData read(String csvStr){
|
||||||
|
return read(new StringReader(csvStr));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 从字符串中读取CSV数据
|
||||||
|
* @param csvStr CSV字符串
|
||||||
|
* @param rowHandler 行处理器,用于一行一行的处理数据
|
||||||
|
*/
|
||||||
|
public void read(String csvStr, CsvRowHandler rowHandler){
|
||||||
|
read(parse(new StringReader(csvStr)), rowHandler);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 读取CSV文件
|
* 读取CSV文件
|
||||||
*
|
*
|
||||||
@ -195,6 +215,23 @@ public class CsvBaseReader implements Serializable {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 从字符串中读取CSV数据并转换为Bean列表,读取后关闭Reader。<br>
|
||||||
|
* 此方法默认识别首行为标题行。
|
||||||
|
* @param <T> Bean类型
|
||||||
|
* @param csvStr csv字符串
|
||||||
|
* @param clazz Bean类型
|
||||||
|
* @return Bean列表
|
||||||
|
*/
|
||||||
|
public <T> List<T> read(String csvStr,Class<T> clazz){
|
||||||
|
// 此方法必须包含标题
|
||||||
|
this.config.setContainsHeader(true);
|
||||||
|
|
||||||
|
final List<T> result = new ArrayList<>();
|
||||||
|
read(new StringReader(csvStr), (row) -> result.add(row.toBean(clazz)));
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 从Reader中读取CSV数据,读取后关闭Reader
|
* 从Reader中读取CSV数据,读取后关闭Reader
|
||||||
*
|
*
|
||||||
|
@ -58,6 +58,36 @@ public class CsvUtilTest {
|
|||||||
reader.read(FileUtil.getUtf8Reader(path), Console::log);
|
reader.read(FileUtil.getUtf8Reader(path), Console::log);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void readCsvStr1(){
|
||||||
|
CsvData data = CsvUtil.getReader().read("# 这是一行注释,读取时应忽略\n" +
|
||||||
|
"\"sss,sss\",姓名,\"性别\",关注\"对象\",年龄,\"\",\"\"\"\n");
|
||||||
|
List<CsvRow> rows = data.getRows();
|
||||||
|
final CsvRow row0 = rows.get(0);
|
||||||
|
Assert.assertEquals("sss,sss", row0.get(0));
|
||||||
|
Assert.assertEquals("姓名", row0.get(1));
|
||||||
|
Assert.assertEquals("性别", row0.get(2));
|
||||||
|
Assert.assertEquals("关注\"对象\"", row0.get(3));
|
||||||
|
Assert.assertEquals("年龄", row0.get(4));
|
||||||
|
Assert.assertEquals("", row0.get(5));
|
||||||
|
Assert.assertEquals("\"", row0.get(6));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void readCsvStr2(){
|
||||||
|
CsvUtil.getReader().read("# 这是一行注释,读取时应忽略\n" +
|
||||||
|
"\"sss,sss\",姓名,\"性别\",关注\"对象\",年龄,\"\",\"\"\"\n",(csvRow)-> {
|
||||||
|
// 只有一行,所以直接判断
|
||||||
|
Assert.assertEquals("sss,sss", csvRow.get(0));
|
||||||
|
Assert.assertEquals("姓名", csvRow.get(1));
|
||||||
|
Assert.assertEquals("性别", csvRow.get(2));
|
||||||
|
Assert.assertEquals("关注\"对象\"", csvRow.get(3));
|
||||||
|
Assert.assertEquals("年龄", csvRow.get(4));
|
||||||
|
Assert.assertEquals("", csvRow.get(5));
|
||||||
|
Assert.assertEquals("\"", csvRow.get(6));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@Ignore
|
@Ignore
|
||||||
public void writeTest() {
|
public void writeTest() {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user