【发布时间】:2014-02-11 00:59:31
【问题描述】:
坦率地说,我什至不知道这是否可能。 但我想做的就像下面一样。
- 我通过终端中的 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 文件中获取对象实例?
附: 我希望不要使用额外的库。
【问题讨论】:
-
对不起,我在代码中提到的文件名是“ClassFile.class”,而不是“HelloWorld.class”。我只是想解释一下;;
-
我认为它可以以相同的方式但略有不同。无论如何,谢谢:D
标签: java class reflection instance .class-file