java的简单反射运用实例(读取csv文件映射为对象)
来源:互联网 发布:java 数据一致性 编辑:程序博客网 时间:2024/05/20 07:14
<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文件映射不到对象,是因为对象没有空的构造函数,所以在运用框架的时候,很多框架都是利用反射原理来实现的,所以在写类的时候一定要注意留下一个空构造函数
0 0
- java的简单反射运用实例(读取csv文件映射为对象)
- 读取简单的CSV文件
- java 反射简单运用
- java读取CSV文件
- Java读取CSV文件
- Java 读取 CSV 文件
- java读取csv文件
- java读取csv文件 .
- Java读取CSV文件
- java读取csv文件
- java读取csv文件
- java读取csv文件
- Java读取csv文件
- java读取csv文件
- java读取csv文件
- Java读取csv文件
- Java 读取csv文件
- java 读取csv文件
- 对C++中指针做函数返回值的认识
- [Codeforces] Round #285 (Div. 2) A、B
- 分解质因数
- 函数调用参数和寄存器
- [Leetcode]Single Number II
- java的简单反射运用实例(读取csv文件映射为对象)
- 对计算机科学的反思
- [LeetCode]Text Justification
- 一位资深射频工程师的成功轨迹
- Java中普通代码块,构造代码块,静态代码块区别及代码示例
- 完数
- 何为splitbrain【记一次RAC节点异常宕机】
- Mac上更改Chrome的主题
- vdceye x64 版本终于可以往hadoop里面写视频数据了