經過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();
	}

如此調用:java

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();
			}
相關文章
相關標籤/搜索