当我们想读取一个别人的Object的文件时,但却不知道它是哪个类的对象写入到该文件,前提是别人也没有告诉我们,没有关系,用记事本打开文件,你会看到一堆乱码,如下:
看到day21.Person,这就是这个类完整的类名,day21是包名
- public static void readObj() throws Exception {
- ObjectInputStream ois = new ObjectInputStream(new FileInputStream(
- "obj.txt"));
- Person p = (Person) ois.readObject();
- System.out.println(p);
- }
复制代码 这里我图省事,重写了Person 的toString 方法,但大多数情况下别人是没有帮你重写这个方法。
所以这里我们想要获取他的属性和方法就要通过反射来做。
代码如下:
- public static void readObj() throws Exception {
- ObjectInputStream ois = new ObjectInputStream(new FileInputStream(
- "obj.txt"));
- Person p = (Person) ois.readObject();
- Constructor[] con= p.getClass().getDeclaredConstructors();
-
-
- for (int i = 0; i < con.length; i++) {
- System.out.println(con[i].getName());
- }
-
- Method[] m = p.getClass().getDeclaredMethods();
- for (int i = 0; i < m.length; i++) {
- System.out.println(m[i].getName());
- }
- Field[] fields = p.getClass().getFields();
- for (int i = 0; i < fields.length; i++) {
- System.out.println(fields[i].get(p));
- }
- }
复制代码
|
|