解析csv字符串并映射到java对象
我正在尝试解析这样的csv字符串解析csv字符串并映射到java对象,java,google-app-engine,csv,Java,Google App Engine,Csv,我正在尝试解析这样的csv字符串 COL1,COL2,COL3 1,2,3 2,4,5 并将列映射到java对象- Class Person{ COL1, COL2, COL3; } 我在google上找到的大多数库都是用于csv文件的,但我使用的是google app engine,因此无法写入或读取文件。目前我正在使用拆分方法,但这种方法的问题是 我在csv字符串中得到的列可能会随着 COL1,COL3,
COL1,COL2,COL3
1,2,3
2,4,5
并将列映射到java对象-
Class Person{
COL1,
COL2,
COL3;
}
我在google上找到的大多数库都是用于csv文件的,但我使用的是google app engine,因此无法写入或读取文件。目前我正在使用拆分方法,但这种方法的问题是
COL1,COL3,COL2
//Split the string into tokens using a comma as the token seperator
StringTokenizer st = new StringTokenizer(lineFromFile, ",");
while (st.hasMoreTokens())
{
//Collect each item
st.nextElement();
}
//Set to object
Person p = new Person(item1, item2, item3);
如果可以反转列,则解析标题行,保存其值并使用它来确定每个标记属于哪一列,例如使用Map
String columns[] = new String[3]; //Fill these with column names
Map<String,String> map = new HashMap<>();
int i=0;
while (st.hasMoreTokens())
{
//Collect each item
map.put(columns[i++], st.nextElement());
}
在搜索和尝试了几个库之后,我能够解决它。如果以后有人需要,我会分享代码-
public class CSVParsing {
public void parseCSV() throws IOException {
List<Person> list = Lists.newArrayList();
String str = "COL1,COL2,COL3\n" +
"A,B,23\n" +
"S,H,20\n";
CsvSchema schema = CsvSchema.emptySchema().withHeader();
ObjectReader mapper = new CsvMapper().reader(Person.class).with(schema);
MappingIterator<Person> it = mapper.readValues(str);
while (it.hasNext()) {
list.add(it.next());
}
System.out.println("stored list is:" + (list != null ? list.toString() : null));
}}
公共类CSVParsing{
public void parseCSV()引发IOException{
List=Lists.newArrayList();
String str=“COL1、COL2、COL3\n”+
A、B、23\n+
“S,H,20\n”;
CsvSchema schema=CsvSchema.emptySchema().withHeader();
ObjectReader mapper=new CsvMapper().reader(Person.class).with(schema);
MappingIterator it=mapper.readValues(str);
while(it.hasNext()){
list.add(it.next());
}
System.out.println(“存储的列表是:”+(list!=null?list.toString():null));
}}
我在google上找到的大多数库都是用于csv文件的,但我是
使用google应用程序引擎,因此无法写入或读取文件
您可以读取文件(在项目文件系统中)。
您可以在blobstore、google云存储用户正则表达式中读取和写入文件,以拆分csv字符串。使用regex grouping()操作符。感谢您的回复。但是,正如我在问题中所说的,我不想得到值,而是想使用迭代器。你想要的东西是一个CSV行并将其转换为一个对象,而无需对其进行任何编码?
public class CSVParsing {
public void parseCSV() throws IOException {
List<Person> list = Lists.newArrayList();
String str = "COL1,COL2,COL3\n" +
"A,B,23\n" +
"S,H,20\n";
CsvSchema schema = CsvSchema.emptySchema().withHeader();
ObjectReader mapper = new CsvMapper().reader(Person.class).with(schema);
MappingIterator<Person> it = mapper.readValues(str);
while (it.hasNext()) {
list.add(it.next());
}
System.out.println("stored list is:" + (list != null ? list.toString() : null));
}}