【发布时间】:2017-10-17 20:46:46
【问题描述】:
我正在读取两个不同的 csv 文件并将数据填充到两个不同的对象中。我正在根据正则表达式拆分 csv 文件的每一行(两个 csv 文件的正则表达式不同)并使用该数组的每个数据填充对象,这些数据是通过使用正则表达式拆分每一行获得的,如下所示:
public static <T> List<T> readCsv(String filePath, String type) {
List<T> list = new ArrayList<T>();
try {
File file = new File(filePath);
FileInputStream fileInputStream = new FileInputStream(file);
InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader)
list = bufferedReader.lines().skip(1).map(line -> {
T obj = null;
String[] data = null;
if (type.equalsIgnoreCase("Student")) {
data = line.split(",");
ABC abc = new ABC();
abc.setName(data[0]);
abc.setRollNo(data[1]);
abc.setMobileNo(data[2]);
obj = (T)abc;
} else if (type.equalsIgnoreCase("Employee")) {
data = line.split("\\|");
XYZ xyz = new XYZ();s
xyz.setName(Integer.parseInt(data[0]));
xyz.setCity(data[1]);
xyz.setEmployer(data[2]);
xyz.setDesignation(data[3]);
obj = (T)xyz;
}
return obj;
}).collect(Collectors.toList());} catch(Exception e) {
}}
csv 文件如下: 一世。 csv 文件填充 ABC 对象:
Name,rollNo,mobileNo
Test1,1000,8888888888
Test2,1001,9999999990
二。 csv 文件填充 XYZ 对象
Name|City|Employer|Designation
Test1|City1|Emp1|SSE
Test2|City2|Emp2|
问题是 csv 文件中的上述任何列都可能缺少数据,如第二个 csv 文件所示。在这种情况下,我会得到 ArrayIndexOutOfBounds 异常。 谁能告诉我使用字符串数组的数据填充对象的最佳方法是什么?
提前致谢。
【问题讨论】:
-
另一个问题是
type == "Employee"不会像您期望的那样工作。type.equals("Employee")应该是这样写的(假设type不能为空)。 -
或
"Employee".equals(type),如果它可以为空。还有一些与忽略大小写相关的方法。 -
或
Objects.equals("Employee", type),如果它可以或不能为空。 -
您说任何列的数据都可能丢失,但这是否意味着连管道分隔器都丢失了?如果是这样,第 4 列的数据在技术上是否可以排在第 3 位,等等?如果可能的话,我不知道你怎么能相信你得到的数据。