java 反射 使用小技巧

经常要读取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]));
				else
					field.set(o, values[i]);
			}
		}
	}
 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值