2014-11-02 2 views
0

bcel classparaser를 사용하여 클래스 이름, 요소 이름 및 메소드 이름을 얻는 방법은 무엇입니까? 필자는 클래스 이름을 가져 오는 방법을 이미 찾았지만 요소 및 메서드 이름은 나에게 뭔가 잘못되었습니다. 누구나 저를 도울 수 있습니까? 여기 내 코드입니다 (거기에 약간의 오류가있는, 완료되지 않음) :BCEL - 클래스 이름, 요소 이름 및 메소드 이름 얻기

import java.io.IOException; 
import java.util.Enumeration; 
import java.util.jar.JarEntry; 
import java.util.jar.JarFile; 

import org.apache.bcel.classfile.ClassParser; 
import org.apache.bcel.generic.ConstantPoolGen; 

public final class BcelTest 
{ 
    // static int methods; 

    public static void main(String[] args) 
    { 
     ClassParser parser; 
     try 
     { 

      JarFile jar = new JarFile("C:\\Users\\OOO\\Desktop\\Sample.Jar"); 
      Enumeration<JarEntry> entries = jar.entries(); 
      ConstantPoolGen cpg = jar.entries(); 
      while (entries.hasMoreElements()) 
      { 
       JarEntry entry = entries.nextElement(); 
       if (!entry.getName().endsWith(".class")) 
        continue; 

       parser = 
        new ClassParser("C:\\Users\\OOO\\Desktop\\Sample.Jar", 
         entry.getName()); 
       methods = getMethodName(cpg); 

       MyClassVisitor visitor = new MyClassVisitor(parser.parse()); 
       visitor.start(); 
      } 

     } 
     catch (IOException e) 
     { 
      e.printStackTrace(); 
     } 
    } 

    public String getMethodName(ConstantPoolGen cpg) 
    { 
     return getMethodName(cpg); 
    } 
} 

답변

1

당신이 필요한 모든 정보를 제공하는 JavaClass 클래스 얻기 위해 JavaParserparse()를 호출 할 수 있습니다 : 큰

import java.io.IOException; 
import java.util.Enumeration; 
import java.util.jar.JarEntry; 
import java.util.jar.JarFile; 

import org.apache.bcel.classfile.ClassParser; 
import org.apache.bcel.classfile.Field; 
import org.apache.bcel.classfile.JavaClass; 
import org.apache.bcel.classfile.Method; 

public final class BcelTest 
{ 
    public static void main(String[] args) 
    { 
     JarFile jar = null; 
     try 
     { 
      String jarName = "C:/theFile.jar"; 
      jar = new JarFile(jarName); 
      Enumeration<JarEntry> entries = jar.entries(); 
      while (entries.hasMoreElements()) 
      { 
       JarEntry entry = entries.nextElement(); 
       if (!entry.getName().endsWith(".class")) 
       { 
        continue; 
       } 

       ClassParser parser = 
        new ClassParser(jarName, entry.getName()); 
       JavaClass javaClass = parser.parse(); 

       System.out.println("Class: "+javaClass.getClassName()); 
       System.out.println(" Fields:"); 
       for (Field field : javaClass.getFields()) 
       { 
        System.out.println(" "+field); 
       } 
       System.out.println(" Methods:"); 
       for (Method method : javaClass.getMethods()) 
       { 
        System.out.println(" "+method); 
       } 
      } 
     } 
     catch (IOException e) 
     { 
      e.printStackTrace(); 
     } 
     finally 
     { 
      if (jar != null) 
      { 
       try 
       { 
        jar.close(); 
       } 
       catch (IOException e) 
       { 
        e.printStackTrace(); 
       } 
      } 
     } 
    } 
} 
+0

을 이러한 클래스 간의 관계를 찾는 방법 jar 파일의 클래스가 다른 클래스를 확장하는지 여부를 감지하거나 다른 클래스 객체에 대한 메소드 호출이 있거나 다른 클래스 객체가 작성되면? 여기를 참조하십시오 : http : //stackoverflow.com/questions/26760153/parse-jar-file-and-find-relationships-between-classes – YDev