java 反射 使用小技巧

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

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

然后再session.save(entity),

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

 

 

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

 

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

Java代码 复制代码  收藏代码
  1. List<ClubWinterActivity> list = (List<ClubWinterActivity>) ParserTxtFileUtils   
  2.                 .getListByFile(file, ClubWinterActivity.classnew String[] {   
  3.                         "cwatype""cwatimes""cwacustomername""cwavin","flag"});  
List<ClubWinterActivity> list = (List<ClubWinterActivity>) ParserTxtFileUtils
				.getListByFile(file, ClubWinterActivity.class, new String[] {
						"cwatype", "cwatimes", "cwacustomername", "cwavin","flag"});

 

 

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

Java代码 复制代码  收藏代码
  1. public static List<?> getListByFile(File file, Class<?> clazz, String[] fieldNames) throws Exception {   
  2.         List<Object> list = new ArrayList<Object>();   
  3.         InputStreamReader isr = new InputStreamReader(new FileInputStream(file), "GB2312");   
  4.         BufferedReader br = new BufferedReader(isr);   
  5.         String line = null;   
  6.         while (null != (line = br.readLine())) {   
  7.             Object o = getObject(line, clazz, fieldNames);   
  8.             if(null != o)   
  9.                 list.add(o);   
  10.         }   
  11.         return list;   
  12.     }  
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;
	}

 

 

Java代码 复制代码  收藏代码
  1. private static Object getObject(String line, Class<?> clazz,   
  2.             String[] fieldNames) throws Exception {   
  3.         Object o = null;   
  4.         if (!"".equals(line)) {   
  5.             o = clazz.newInstance();   
  6.             String[] values = line.split(",");   
  7.             setObjectFieldsValue(o, values, fieldNames);   
  8.         }   
  9.         return o;   
  10.     }  
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中

Java代码 复制代码  收藏代码
  1. private static void setObjectFieldsValue(Object o, String[] values,   
  2.             String[] fieldNames) throws Exception {   
  3.         if (null != values && values.length > -1) {   
  4.             for (int i = 0; i < fieldNames.length; i++) {   
  5.                 Field field = o.getClass().getDeclaredField(fieldNames[i]);   
  6.                 field.setAccessible(true);   
  7.                 String typeName = field.getType().getSimpleName();   
  8.                 if ("Long".equals(typeName) || "long".equals(typeName))   
  9.                     field.set(o, Long.parseLong(values[i]));   
  10.                 else if ("Date".equals(typeName))   
  11.                     field.set(o, DateUtils.getDateByFormat(values[i],   
  12.                             Constants.DATEFORMAT1));   
  13.                 else if ("Integer".equals(typeName) || "int".equals(typeName))   
  14.                     field.set(o, Integer.parseInt(values[i]));   
  15.                 else if ("Double".equals(typeName) || "double".equals(typeName))   
  16.                     field.set(o, Double.parseDouble(values[i]));   
  17.                 else if ("Float".equals(typeName) || "float".equals(typeName))   
  18.                     field.set(o, Float.parseFloat(values[i]));   
  19.                 else if ("Boolean".equals(typeName)   
  20.                         || "boolean".equals(typeName))   
  21.                     field.set(o, Boolean.parseBoolean(values[i]));   
  22.                 else  
  23.                     field.set(o, values[i]);   
  24.             }   
  25.         }   
  26.     }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值