gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 06:20:50 29 4
gpt4 key购买 nike

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

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

    公共(public)课主要{

    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 文件中获取对象实例吗?

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

最佳答案

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

关于java - 如何从java中的.class文件获取实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21258032/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com