坦白说,我什至不知道这是否可能。
但我想做的就像下面这样。
- 我通过终端中的 javac 命令从 ClassFile.java 创建了一个类文件。
- 然后我想从 .java 文件或 .class 文件获取一个实例。
- 接下来,我在eclipse中制作了另一个项目,正如你猜的那样,这个项目路径和上层文件路径完全不同。例如,ClassFile.java/class 文件可以位于“~/Downloads”文件夹中,另一方面,新的 eclipse 项目可以位于“~/workspace/”中。
- 所以我通过 FileInputStream 读取了步骤 1 中引用的文件。
-
从这里,我只需粘贴我的代码。
公共类主要{
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"));
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)