通过java的反射动态生成日志文件的方法

/**
	 * 根据反射传入不同的List<T>动态生成日志文件
	 * @param list								数据集合
	 * @param writeTxtPath						日志文件生成路径
	 * @throws IllegalArgumentException
	 * @throws IllegalAccessException
	 * @throws FileNotFoundException
	 */
	public static <T> void writeTxtFile(List<T> list,String writeTxtPath) throws IllegalArgumentException, IllegalAccessException, FileNotFoundException {
		if(list.size() == 0){
			throw new RuntimeException("集合的个数为0");
		}
		PrintWriter pw = new PrintWriter(writeTxtPath);
		//生成标题
		StringBuffer sbTitle = new StringBuffer();
		//生成每个javaBean的值
		StringBuffer sbValue = new StringBuffer();
		pw.println(list.size());
		Class tClass = list.get(0).getClass();
		//获得类名称(只含类名称不含包名)
		String className = tClass.getSimpleName();
		//获得所有的属性名称
		Field[] fields = tClass.getDeclaredFields();
		//获得该类中所有的方法名称(不包括父类)
		Method[] methods = tClass.getDeclaredMethods();
		for(Field field:fields){
			Field.setAccessible(fields,true);
			sbTitle.append(field.getName()+",");
		}
		pw.println(sbTitle.substring(0, sbTitle.length()-1));
		sbTitle.setLength(0);
		for(int i=0;i<list.size();i++){
			//System.out.println("className:"+className);
			//System.out.println("fields:"+fields.length);
			for(Field field:fields){
				//访问类中的私有属性时需要设置该属性
				Field.setAccessible(fields,   true);
				//System.out.println("field:--  "+field.getName()+"   ---value:---"+field.get(list.get(i)));
				sbValue.append(field.get(list.get(i))+",");
			}
			pw.println(sbValue.substring(0, sbValue.length()-1));
			sbValue.setLength(0);
		}
		pw.flush();
		pw.close();
	}

如此调用:

List<User> userList = new ArrayList<User>();
		for(int i=0;i<10;i++){
			User user = new User();
			user.setName("carl"+i);
			user.setPassword(""+i);
			userList.add(user);
		}
		
			try {
				writeTxtFile(userList,"d:\\1.txt");
			} catch (IllegalArgumentException e) {
				e.printStackTrace();
			} catch (FileNotFoundException e) {
				e.printStackTrace();
			} catch (IllegalAccessException e) {
				e.printStackTrace();
			}


转载于:https://my.oschina.net/u/1866821/blog/344054

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值