如何从java中的.class文件中获取实例

时间:2014-01-21 12:21:57

标签: java class reflection instance .class-file

坦率地说,即使有可能,我也不知道。 但我想做的就像下面一样。

  1. 我通过终端中的javac命令从ClassFile.java创建了一个类文件。
  2. 然后我想从.java文件或.class文件中获取一个实例。
  3. 接下来,我在eclipse中创建了另一个项目,因为你猜这个项目路径和上层文件路径是完全不同的。例如,ClassFile.java/class文件可以位于'〜/ Downloads'文件夹中,另一方面,新的eclipse项目可以位于'〜/ workspace /'。
  4. 所以我读取了FileInputStream在步骤1中引用的文件。
  5. 从这里开始,我只需粘贴我的代码。

    public class Main {

    private static final String CLASS_FILE_PATH = 
            "/Users/juneyoungoh/Downloads/ClassFile.class";
    
    private static final String JAVA_FILE_PATH = 
            "/Users/juneyoungoh/Downloads/ClassFile.java";
    
    private static Class getClassFromFile(File classFile) throws Exception {
        System.out.println("get class from file : [" + classFile.getCanonicalPath() + " ]");
        Object primativeClz = new Object();
        ObjectInputStream ois = null;
        ois = new ObjectInputStream(new FileInputStream(classFile));
        primativeClz = ois.readObject();
        ois.close();
        return primativeClz.getClass();
    }
    
    public static void main(String[] args) throws Exception {
        getClassInfo(getClassFromFile(new File(CLASS_FILE_PATH)));
    }
    

    }

  6. 就像你的假设一样,这段代码有错误。 例如,它显示:

    java.io.StreamCurruptedException: invalid stream header : CAFEBABE
    

    这有没有办法从.class文件或.java文件中获取对象实例?

    P.S。  我希望不要使用额外的库。

1 个答案:

答案 0 :(得分:5)

private static final String CLASS_FOLDER =
        "/Users/juneyoungoh/Downloads/";

private static Class getClassFromFile(String fullClassName) throws Exception {
    URLClassLoader loader = new URLClassLoader(new URL[] {
            new URL("file://" + CLASS_FOLDER)
    });
    return loader.loadClass(fullClassName);
}

public static void main( String[] args ) throws Exception {
    System.out.println((getClassFromFile("ClassFile"));
}