请问有谁知道如何解析JAVA源文件的?
读取该文件把属性、属性类型、方法等信息取出来
急救!
已知的是ECLIPSE下JDT库中有方法可以解决,但怎么找都找不到如何使用
平台:ECLIPSE3.2,JDK1.5

解决方案 »

  1.   

    你可以用反射,输入该对象的全路径带包名和类名。
    这样就可以取出该类的所有属性和方法拉。//有数据的bean  
    package  utilbeans;  public  class  UtilsBeansOne  {  
           public  UtilsBeansOne()  {  
           }  
     
           public  String  getPassword()  {  
                   return  password;  
           }  
     
           public  String  getUserName()  {  
                   return  userName;  
           }  
     
           public  void  setUserName(String  userName)  {  
                   this.userName  =  userName;  
           }  
     
           public  void  setPassword(String  password)  {  
                   this.password  =  password;  
           }  
     
           private  String  userName  =  "张三";  
           private  String  password  =  "123456";  
    }  
    //////////////////////////////////////////  
    没有数据的bean  
    package  utilbeans;  public  class  UtilsBeansTwo  {  
           public  UtilsBeansTwo()  {  
           }  
     
           public  String  getPassword()  {  
                   return  password;  
           }  
     
           public  String  getUserName()  {  
                   return  userName;  
           }  
     
           public  void  setUserName(String  userName)  {  
                   System.out.println(userName);  
                   this.userName  =  userName;  
           }  
     
           public  void  setPassword(String  password)  {  
                   System.out.println(password);  
                   this.password  =  password;  
           }  
     
           private  String  userName  =  null;  
           private  String  password  =  null;  
     
    }  
    ///////////////////////////////////////////  
    具体的填充方法  
    package  utilbeans;  
     
    import  java.lang.reflect.Method;  
    import  java.lang.reflect.*;  
      
    public  class  UtilsBeansTest  {  
           public  UtilsBeansTest()  {  
           }  
     
           /**  
             *  此功能为将第一个对象的内容填充到第二个对象中  
             *  @param  oneObject  String  内容已经存在的对象  
             *  @param  twoObject  String  要填充的对象  
             */  
           public  static  Object  utilBean(String  oneObject,  String  twoObject)  {  
                   Class  utilOneClass  =  null;  
                   Class  utilTwoClass  =  null;  
                   try  {  
     
                           //将字符串转化为Class对象  
                           utilOneClass  =  Class.forName(oneObject);  
                           utilTwoClass  =  Class.forName(twoObject);  
                   }  catch  (ClassNotFoundException  ex)  {  
                           System.out.println(ex.toString());  
                           return  null;  
                   }  
     
                   Object  objUtilBeanOne  =  null;  
                   Object  objUtileBeanTwo  =  null;  
                   try  {  
     
                           //创建对象实例  
                           objUtilBeanOne  =  utilOneClass.newInstance();  
                           objUtileBeanTwo  =  utilTwoClass.newInstance();  
                   }  catch  (IllegalAccessException  ex1)  {  
                           System.out.println(ex1.toString());  
                           return  null;  
                   }  catch  (InstantiationException  ex1)  {  
                           System.out.println(ex1.toString());  
                           return  null;  
                   }  
     
                   //获得对象的所有方法;  
                   Method[]  oneMethod  =  utilOneClass.getDeclaredMethods();  
                   Method[]  twoMethod  =  utilTwoClass.getDeclaredMethods();  
     
                   Method  oneBeanMethod  =  null;  
                   Method  twoBeanMethod  =  null;  
     
                   //循环所有方法  
                   for  (int  oneIndex  =  0;  oneIndex  <  oneMethod.length;  oneIndex++)  {  
                           oneBeanMethod  =  oneMethod[oneIndex];  
                           String  oneMethodName  =  oneBeanMethod.getName();  
     
                           //判断是否为get方法  
                           if  (oneMethodName.indexOf("get")  >  -1)  {  
                                   for  (int  twoIndex  =  0;  twoIndex  <  twoMethod.length;  twoIndex++)  {  
                                           twoBeanMethod  =  twoMethod[twoIndex];  
     
                                           //获得方法名  
                                           String  towMethodName  =  twoBeanMethod.getName();  
                                           String  oneName  =  oneMethodName.substring(oneMethodName.  
                                                           indexOf("get")  +  3);  
                                           String  twoName  =  towMethodName.substring(towMethodName.  
                                                           indexOf("set")  +  3);  
     
                                           //判断去掉get/set后的方法名是否相同  
                                           if  (oneName.equals(twoName))  {  
                                                   try  {  
                                                           //获得第一个bean的值  
                                                           String  oneAttrValuedd  =  oneBeanMethod.invoke(  
                                                                           objUtilBeanOne,  null).toString();  
     
                                                           //将从第一个bean中取出的值,填充到第二个bean中  
                                                           Object[]  obj  =  {oneAttrValuedd};  
                                                             
                                                           //将obj内容填充到objUtileBeanTwo对象的twoBeanMethod方法中  
                                                           twoBeanMethod.invoke(  
                                                                           objUtileBeanTwo,  obj);  
                                                   }  catch  (InvocationTargetException  ex2)  {  
                                                           System.out.println(ex2.toString());  
                                                           return  null;  
                                                   }  catch  (IllegalArgumentException  ex2)  {  
                                                           ex2.printStackTrace();  
                                                           return  null;  
                                                   }  catch  (IllegalAccessException  ex2)  {  
                                                           System.out.println(ex2.toString());  
                                                           return  null;  
                                                   }  
                                           }  
                                   }  
                           }  
                   }  
                   return  objUtileBeanTwo;  
           }  
     
           public  static  void  main(String[]  args)  {  
                   //bean填充前  
                   UtilsBeansTwo  utitlBean  =  new  UtilsBeansTwo();  
                   System.out.println("username  :  "  +  utitlBean.getUserName());  
                   System.out.println("password  :  "  +  utitlBean.getPassword());  
                   UtilsBeansTwo  utitlBeanAfter  =  (UtilsBeansTwo)utilBean("utilbeans.UtilsBeansOne",  "utilbeans.UtilsBeansTwo");  
                   System.out.println("---------------------------------------------");  
                   //bean填充后  
                   System.out.println("username  :  "  +  utitlBeanAfter.getUserName());  
                   System.out.println("password  :  "  +  utitlBeanAfter.getPassword());  
           }  
    }  
      

  2.   

    谢谢!!!明白啦。
    不过有没有效率高的?我现在有几百个文件的话就要反射几百次,创建几百个对象,跑得好慢。
    我想,既然已经知道源文件了有没有可以直接读取JAVA源文件而不用反射的方法,这样效率会比反射高很多。