A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

当我们想读取一个别人的Object的文件时,但却不知道它是哪个类的对象写入到该文件,前提是别人也没有告诉我们,没有关系,用记事本打开文件,你会看到一堆乱码,如下:
看到day21.Person,这就是这个类完整的类名,day21是包名

  1. public static void readObj() throws Exception {

  2.                 ObjectInputStream ois = new ObjectInputStream(new FileInputStream(
  3.                                 "obj.txt"));

  4.                 Person p = (Person) ois.readObject();

  5.                 System.out.println(p);

  6.         }
复制代码
这里我图省事,重写了Person 的toString 方法,但大多数情况下别人是没有帮你重写这个方法。
所以这里我们想要获取他的属性和方法就要通过反射来做。
代码如下:
  1.         public static void readObj() throws Exception {

  2.                 ObjectInputStream ois = new ObjectInputStream(new FileInputStream(
  3.                                 "obj.txt"));

  4.                 Person p = (Person) ois.readObject();
  5.                 Constructor[] con=  p.getClass().getDeclaredConstructors();
  6.        
  7.                
  8.                 for (int i = 0; i < con.length; i++) {
  9.                         System.out.println(con[i].getName());
  10.                 }
  11.                
  12.                 Method[] m = p.getClass().getDeclaredMethods();
  13.                 for (int i = 0; i < m.length; i++) {

  14.                         System.out.println(m[i].getName());
  15.                 }
  16.                 Field[] fields = p.getClass().getFields();

  17.                 for (int i = 0; i < fields.length; i++) {

  18.                         System.out.println(fields[i].get(p));
  19.                 }

  20.         }
复制代码








      






0 个回复

您需要登录后才可以回帖 登录 | 加入黑马