2012-08-17 26 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