将 CSV 文件映射到 POJO
mapping CSV file to POJO
姓名、手机、城市、电子邮件
Alfreds,123566X,Delhi,abc@gmail.com
我有这个只有两行的文件,第一行是 headers 行,第二行是值行。
只有两个文件固定在文件 NAME 和 MOBILE 中,其他文件不固定,例如文件可能是 (NAME,MOBILE,PRODUCT) 或者可能是 (NAME,MOBILE,SUMMURY,ABC,XYZ) 等
我想将此文件映射到实体 class
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-). Reading the documentation tells you to pass a "regex" for the delimiter. You can read more about regexes here 但要仅匹配逗号,您可以使用文字逗号。
String header, data;
// Read file into the above strings
String[] headings = header.split(",");
String[] fields = data.split(",");
现在您需要将其输入 class。将数据创建一个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....
}
姓名、手机、城市、电子邮件
Alfreds,123566X,Delhi,abc@gmail.com
我有这个只有两行的文件,第一行是 headers 行,第二行是值行。 只有两个文件固定在文件 NAME 和 MOBILE 中,其他文件不固定,例如文件可能是 (NAME,MOBILE,PRODUCT) 或者可能是 (NAME,MOBILE,SUMMURY,ABC,XYZ) 等
我想将此文件映射到实体 class
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-). Reading the documentation tells you to pass a "regex" for the delimiter. You can read more about regexes here 但要仅匹配逗号,您可以使用文字逗号。
String header, data;
// Read file into the above strings
String[] headings = header.split(",");
String[] fields = data.split(",");
现在您需要将其输入 class。将数据创建一个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....
}