2012-08-17 46 views
1

如何從* .class文件獲取java.lang.Class?反映* .class文件

我有一個文件夾,其中包含* .class文件。我需要將它們全部反映到java.lang.Class中。我讀過this的答案,這樣做了,在第一個選項中指出:

 URL[] classUrl = new URL[1]; 
     classUrl[0] = new URL("file:" + classFilesFolder); 
     URLClassLoader ucl = new URLClassLoader(classUrl); 
     Class c = ucl.loadClass("I DON'T KNOW CLASS NAMES HERE!"); 

的問題是,我不知道我反映了類名。我怎麼解決這個問題?

+1

通常一個名爲'Foo'的類被編譯成一個名爲'Foo.class'的類文件。你不能從文件名中知道嗎? – 2012-08-17 13:04:57

+0

爲什麼你不能從'classUrl'中提取它? – adarshr 2012-08-17 13:05:12

+0

在我的情況下,正確的類名是一個packageName.class.Name,而不僅僅是一個className。 (「models.myClass」而不是「myClass」) - 這是一個問題。 – Zharro 2012-08-17 13:28:30

回答

0

如果classFilesFolder/home/user且文件夾內的文件名稱爲/home/user/com/something/My.class,則類名稱(包括包)將爲com.something.My。所以班級名稱是完整的文件名,classFilesFolder刪除,然後將所有正斜槓更改爲點,最後刪除.class

+0

不,我仍然無法加載類,如果我沒有指定包名稱(** models **。myClass)。 – Zharro 2012-08-17 13:40:48

+0

com.something.My在我的示例中包含軟件包名稱。我重寫了一個更清晰的答案。 – 2012-08-17 13:59:53

+0

我把我的班級文件直接放到文件夾classFilesFolder中。這些* .class文件是要導入的。可能更好地放棄imoort * .class文件並使用jar文件? – Zharro 2012-08-17 14:11:46