将 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....
}