2014-01-21 25 views
1

坦率地说,我甚至不知道它是否可行。 但我想要做的就像下面一样。如何从java中的.class文件获取实例

  1. 我在ClassFile.java中通过javac命令在终端中创建了一个类文件。
  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文件?

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

+0

对不起,我在代码中引用的文件名是'ClassFile.class',而不是'HelloWorld.class'。我只是试图解释;; –

+0

可能的[如何从运行时从文件夹或JAR加载类的重复?](http://stackoverflow.com/questions/11016092/how-to-load-classes-at-runtime-from-a-folder-or -jar) –

+0

我认为它可以以相同的方式但略有不同。无论如何,谢谢:D –

回答

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

谢谢:-)我终于调用位于另一个.class文件中的main方法。非常感谢:D –

相关问题