【问题标题】:How can get an instance from .class file in java如何从java中的.class文件中获取实例
【发布时间】:2014-02-11 00:59:31
【问题描述】:

坦率地说,我什至不知道这是否可能。 但我想做的就像下面一样。

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

    公共类主{

    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)));
    }
    

    }

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

java.io.StreamCurruptedException: invalid stream header : CAFEBABE

这有什么方法可以从 .class 文件或 .java 文件中获取对象实例?

附: 我希望不要使用额外的库。

【问题讨论】:

  • 对不起,我在代码中提到的文件名是“ClassFile.class”,而不是“HelloWorld.class”。我只是想解释一下;;
  • 我认为它可以以相同的方式但略有不同。无论如何,谢谢:D

标签: java class reflection instance .class-file


【解决方案1】:
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"));
}

【讨论】:

  • 谢谢:-) 我终于调用了位于另一个 .class 文件中的 main 方法。非常感谢:D
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-21
  • 1970-01-01
相关资源
最近更新 更多