废话不多说,直接上代码,详细代码如下:
/** * * @author daimami.com * 打印出对象的所有属性的工具类 * 使用方法示例 * BeanDebugger.dump(object); */ public class BeanDebugger { public static String outputFile = "d:/log/bean_"+System.currentTimeMillis()+".txt"; public static PrintWriter pw = null;; static { try{ //准备输出文件 pw = new PrintWriter(outputFile); } catch(Exception e){ e.printStackTrace(); } } public static void println(String s){ System.out.println(s); // pw.println(s); } /** * 调试, 打印出给定 Bean 的所有属性的取值. * @param bean * @param proArray * 需要打印的对象 */ public static void dump(Object bean,String[] proArray) { if (bean instanceof Collection) { @SuppressWarnings("unchecked") Collection<Object> collection = (Collection<Object>) bean; println("print Collection begein!"); for (Object o : collection) { dump(o,proArray); } println("print Collection end!"); } else if (bean instanceof Map) { println("print Map begein!"); @SuppressWarnings("unchecked") Map<Object,Object> map = (Map<Object,Object>) bean; for (Object o : map.keySet()) { Object value = map.get(o); if(isImmutableObjects(value)){ println("["+o.toString()+"]=" + value.toString()); } else { println("["+o.toString()+"] begin"); dump(value,proArray); println("["+o.toString()+"] end!" ); } } println("print Map end!"); } else { if(isImmutableObjects(bean)){ //不可变类 println("["+bean.getClass().getName()+"]="+bean.toString()); } else { printObject(bean,proArray); } } } /** * 判断是否是不可变类 * @param bean * @return */ private static boolean isImmutableObjects(Object bean) { if(bean instanceof Integer || bean instanceof Long || bean instanceof String || bean instanceof Short || bean instanceof Boolean || bean instanceof Byte || bean instanceof Character || bean instanceof Double || bean instanceof Float || bean instanceof Number){ return true; } return false; } /** * * 从 bean 中读取有效的属性描述符. NOTE: 名称为 class 的 PropertyDescriptor 被排除在外. * @param bean * Object - 需要读取的 Bean * @return PropertyDescriptor[] - 属性列表 */ public static java.beans.PropertyDescriptor[] getAvailablePropertyDescriptors( Object bean) { try { // 从 Bean 中解析属性信息并查找相关的 write 方法 java.beans.BeanInfo info = java.beans.Introspector.getBeanInfo(bean .getClass()); if (info != null) { java.beans.PropertyDescriptor pd[] = info .getPropertyDescriptors(); Vector<PropertyDescriptor> columns = new Vector<PropertyDescriptor>(); for (int i = 0; i < pd.length; i++) { String fieldName = pd[i].getName(); if (fieldName != null && !fieldName.equals("class")) { columns.add(pd[i]); } } java.beans.PropertyDescriptor[] arrays = new java.beans.PropertyDescriptor[columns .size()]; for (int j = 0; j < columns.size(); j++) { arrays[j] = (PropertyDescriptor) columns.get(j); } return arrays; } } catch (Exception ex) { ex.printStackTrace(); return null; } return null; } public static void dump(Object bean) { dump(bean,null); } private static void printObject(Object bean, String[] proArray) { java.beans.PropertyDescriptor[] descriptors = getAvailablePropertyDescriptors(bean); for (int i = 0; descriptors != null && i < descriptors.length; i++) { java.lang.reflect.Method readMethod = descriptors[i] .getReadMethod(); try { String proName = descriptors[i].getName(); if(proArray == null || (proArray !=null && inArray(proName,proArray))){ Object value = readMethod.invoke(bean, new Object[]{}); println("[" + bean.getClass().getName() + "]." + proName + "(" + descriptors[i].getPropertyType().getName() + ") = " + value); } } catch (Exception e) { e.printStackTrace(); } } } /** * 判断proName是否在proArray里面 * @param proName * @param proArray * @return */ private static boolean inArray(String proName, String[] proArray) { if(proArray == null) return false; boolean in = false; for(String s : proArray){ if(proName.equals(s)){ in = true; break; } } return in; } }