/** * 根據反射傳入不一樣的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(); }