将CSV文件映射到POJO



NAME,MOBILE,CITY,EMAIL

Alfreds,123566X,德里,abc@gmail.com

我有一个只有两行的文件,第一行是头,第二行是值。文件名中只有两个文件是固定的,而MOBILE其他文件则不是固定的,比如文件可能是(NAME、MOBILE、PRODUCT(或可能是(NAME、MOBILE、SUMMURY、ABC、XYZ(等。

我想将此文件映射到实体类

public class MyPojo{
private String NAME;
private int MOBILE;
private ???

//getter and setter
}

任何帮助都非常感谢。建议我任何解决方案,我该怎么做。请帮忙。提前谢谢。编程界的新手。

File file=new File("file.csv");   
FileReader fr=new FileReader(file);   
BufferedReader br=new BufferedReader(fr);  
String [] line1 = br.readLine().split(",");
String [] line2 = br.readLine().split(",");
为了简单的回答,我假设实际数据中没有逗号。如果你想解析一个更通用的CSV文件,如果你没有信心完全从头开始,最好使用库。

您需要在逗号处拆分每个字符串,因此请使用string.split(https://docs.oracle.com/javase/8/docs/api/java/lang/String.html#split-java.lang.String-(。阅读文档告诉您传递一个";regex";用于分隔符。您可以在这里阅读更多关于正则表达式的内容,但要只匹配逗号,您可以使用字面逗号。

String header, data;
// Read file into the above strings
String[] headings = header.split(",");
String[] fields   = data.split(",");

现在你需要把这个输入你的课堂。创建数据的HashMap并将其传递给Pojo:的构造函数

import java.util.HashMap;
import java.util.Map;
// Math.min selects the smaller of two values
int nItems = Math.min(headings.length, fields.length);
Map<String,String> map = new HashMap<String,String>(nItems);
// Start at the third item
for (int i = 2; i < nItems; i++) {
map.put(headings[i], fields[i]);
}
Pojo pojo = new Pojo(fields[0], fields[1], map);

然后,您只需要在Pojo上使用一个构造函数,该构造函数接受参数(String name, String mobile, Map<String,String> extraData)

class Pojo {
String name, mobile;
Map<String,String> extraData;
public Pojo(String name, String mobile, Map<String,String> extraData) {
this.name = name;
this.mobile = mobile;
this.extraData = new HashMap<String,String>(extraData);
}
// getters/setters....
}

最新更新