2014-01-21 22 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 –

相關問題