Advertisement
neoe

a fair java object to string dumper

Jan 14th, 2013
620
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5 2.85 KB | None | 0 0
  1. import java.io.BufferedWriter;
  2. import java.io.ByteArrayOutputStream;
  3. import java.io.IOException;
  4. import java.io.OutputStreamWriter;
  5. import java.io.Writer;
  6. import java.lang.reflect.Array;
  7. import java.lang.reflect.Field;
  8. import java.lang.reflect.Modifier;
  9. import java.util.Iterator;
  10.  
  11. public class DumpToString {
  12.  
  13.     public static String dump(Object o) throws Exception {
  14.         ByteArrayOutputStream ba = new ByteArrayOutputStream();
  15.         Writer out = new BufferedWriter(new OutputStreamWriter(ba, "utf8"));
  16.         out.write("dump[");
  17.         dump(o, out, 0);
  18.         out.write("\n]");
  19.         out.close();
  20.         return ba.toString();
  21.     }
  22.  
  23.     public static void dump(Object o, Writer out, int indent) throws Exception {
  24.         if (o == null)
  25.             return;
  26.         if (o.getClass().isArray()) {
  27.             out.write("arr[");
  28.             for (int i = 0; i < Array.getLength(o); i++) {
  29.                 if (i > 0) {
  30.                     out.write("\n");
  31.                     indent(indent+1, out);
  32.                     out.write(",");
  33.                 }
  34.                 dump(Array.get(o, i), out, indent + 1);
  35.             }
  36.             out.write("]");
  37.         } else if (o instanceof Iterable) {
  38.             Iterator i = ((Iterable) o).iterator();
  39.             out.write("list[");
  40.             int index = 0;
  41.             while (i.hasNext()) {
  42.                 if (index > 0) {
  43.                     out.write("\n");
  44.                     indent(indent, out);
  45.                     out.write(",");
  46.                 }
  47.                 dump(i.next(), out, indent + 1);
  48.                 index++;
  49.             }
  50.             out.write("\n");
  51.             indent(indent, out);
  52.             out.write("]");
  53.         } else {
  54.             String name = o.getClass().getName();
  55.             if (isPrimitive(name)) {
  56.                 out.write(o.toString());
  57.             } else {
  58.                 out.write(name);
  59.                 out.write("{\n");
  60.                 indent(indent + 1, out);
  61.                 Class oClass = o.getClass();
  62.                 int i2 = 0;
  63.                 while (oClass != null) {
  64.                     if (isPrimitive(oClass.getName())) {
  65.                         if (i2 > 0) {
  66.                             out.write("\n");
  67.                             indent(indent + 1, out);
  68.                             out.write(",");
  69.                         } else
  70.                             i2++;
  71.                         out.write("toString()=" + o.toString());
  72.                         break;
  73.                     }
  74.                     Field[] fields = oClass.getDeclaredFields();
  75.  
  76.                     for (int i = 0; i < fields.length; i++) {
  77.                         fields[i].setAccessible(true);
  78.                         {
  79.                             int mod = fields[i].getModifiers();
  80.                             if (Modifier.isStatic(mod) && Modifier.isFinal(mod))
  81.                                 continue;
  82.                         }
  83.                         Object value = fields[i].get(o);
  84.                         if (value != null) {
  85.                             if (i2 > 0) {
  86.                                 out.write("\n");
  87.                                 indent(indent + 1, out);
  88.                                 out.write(",");
  89.                             } else
  90.                                 i2++;
  91.                             out.write(fields[i].getName());
  92.                             out.write("=");
  93.                             dump(value, out, indent + 1);
  94.                         }
  95.                     }
  96.                     oClass = oClass.getSuperclass();
  97.                 }
  98.                 out.write("\n");
  99.                 indent(indent, out);
  100.                 out.write("}");
  101.             }
  102.         }
  103.     }
  104.  
  105.     private static void indent(int i, Writer out) throws IOException {
  106.         for (; i > 0; i--)
  107.             out.write("\t");
  108.     }
  109.  
  110.     private static boolean isPrimitive(String name) {
  111.         return name.startsWith("java.") || name.startsWith("javax.")
  112.                 || name.indexOf(".") < 0;
  113.     }
  114. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement