<span style="font-family: Arial, Helvetica, sans-serif;">private Map<String, ArrayList<? extends Object>> loadCSVObject(</span>
String objectName, String csvFileNodeName) throws Exception {
String fieldArray[] = null;
Map<String, ArrayList<? extends Object>> map = new HashMap<String, ArrayList<? extends Object>>();
InputStream inputStream = new FileInputStream(new File(DATA_FILE_PREFIX
+ File.separator + csvFileNodeName));
BufferedReader br = new BufferedReader(new InputStreamReader(
inputStream));
if (br.ready()) {
String line = null;
for (int i = 0; i < 3; i++) {
if (i == 2) {
line = br.readLine().substring(1);
fieldArray = line.split(",");
} else if (i < 2 || i < 3) {
br.readLine();
}
}
}
while (br.ready()) {
String line = br.readLine();
String valueArray[] = line.split(",");
Object o = Class.forName(objectName).newInstance();
for (int i = 1; i < valueArray.length; i++) {
String value = valueArray[i].replace("&cm;", ",");
this.setFieldValue(o, StringUtils.trim(fieldArray[i - 1]), value);
}
ArrayList<Object> list = (ArrayList<Object>)map.get(valueArray[0]);
if (list == null) {
list = new ArrayList<Object>();
map.put(valueArray[0], list);
}
list.add(o);
}
br.close();
return map;
}
<span style="white-space:pre"> </span>// 对象映射
private void setFieldValue(Object obj, String fname, String value) {
if (value == null || value.equals("") ) {
return;
}
Class<?> clazz = obj.getClass();
try {
String methodname = "set" + Character.toUpperCase(fname.charAt(0))
+ fname.substring(1);
Method[] methods = clazz.getMethods();
Method method = null;
for (Method m : methods) {
if (m.getName().equals(methodname)) {
method = m;
break;
}
}
if (method == null) {
method = clazz.getDeclaredMethod(methodname);
if (!Modifier.isPublic(method.getModifiers())) {
method.setAccessible(true);
}
method.invoke(obj);
} else {
Class<?>[] types = method.getParameterTypes();
if (types[0].equals(BigDecimal.class)) {
method.invoke(obj, new BigDecimal(value));
} else {
method.invoke(obj, value);
}
}
} catch (Exception e) {
try {
Field field = clazz.getDeclaredField(fname);
if (!Modifier.isPublic(field.getModifiers())) {
field.setAccessible(true);
}
if (field.getType().equals(BigDecimal.class)) {
field.set(obj, new BigDecimal(value));
} else {
field.set(obj, value);
}
} catch (Exception fe) {
return;
}
}
}
题外话:以前用Hibernate做项目是出现过,根据xml文件映射不到对象,是因为对象没有空的构造函数,所以在运用框架的时候,很多框架都是利用反射原理来实现的,所以在写类的时候一定要注意留下一个空构造函数