java 反射 使用小技巧

来源:互联网 发布:学数控编程用什么软件 编辑:程序博客网 时间:2024/06/12 00:47

经常要读取txt或者excel到数据库

以前都是读取后然后转成list,然后set到表对象(hibernate映射的表对象),

然后再session.save(entity),

如果文件中的title很多的话,就太麻烦了。

 

 

现在用java 反射,可以轻松解决

 

ClubWinterActivity是表对象,new String[]{}中是txt中的title,就是说取这些值,放入表对象的这些字段:

List<ClubWinterActivity> list = (List<ClubWinterActivity>) ParserTxtFileUtils.getListByFile(file, ClubWinterActivity.class, new String[] {"cwatype", "cwatimes", "cwacustomername", "cwavin","flag"});

 

 

读取每行txt,放入getObject()中

public static List<?> getListByFile(File file, Class<?> clazz, String[] fieldNames) throws Exception {List<Object> list = new ArrayList<Object>();InputStreamReader isr = new InputStreamReader(new FileInputStream(file), "GB2312");BufferedReader br = new BufferedReader(isr);String line = null;while (null != (line = br.readLine())) {Object o = getObject(line, clazz, fieldNames);if(null != o)list.add(o);}return list;}

 

 

private static Object getObject(String line, Class<?> clazz,String[] fieldNames) throws Exception {Object o = null;if (!"".equals(line)) {o = clazz.newInstance();String[] values = line.split(",");setObjectFieldsValue(o, values, fieldNames);}return o;}

 

把值set到o中

private static void setObjectFieldsValue(Object o, String[] values,String[] fieldNames) throws Exception {if (null != values && values.length > -1) {for (int i = 0; i < fieldNames.length; i++) {Field field = o.getClass().getDeclaredField(fieldNames[i]);field.setAccessible(true);String typeName = field.getType().getSimpleName();if ("Long".equals(typeName) || "long".equals(typeName))field.set(o, Long.parseLong(values[i]));else if ("Date".equals(typeName))field.set(o, DateUtils.getDateByFormat(values[i],Constants.DATEFORMAT1));else if ("Integer".equals(typeName) || "int".equals(typeName))field.set(o, Integer.parseInt(values[i]));else if ("Double".equals(typeName) || "double".equals(typeName))field.set(o, Double.parseDouble(values[i]));else if ("Float".equals(typeName) || "float".equals(typeName))field.set(o, Float.parseFloat(values[i]));else if ("Boolean".equals(typeName)|| "boolean".equals(typeName))field.set(o, Boolean.parseBoolean(values[i]));elsefield.set(o, values[i]);}}}
 

 

 

 

 

 

 

 

 

 

原创粉丝点击