来自远程目录的Java Class.forName()

时间:2013-05-02 10:04:56

标签: java class classpath classloader classnotfoundexception

我目前正在使用Class.forName()加载Java类来加载它。

clazz = Class.forName("interfaces.MyClass");

但是现在我想从不同的目录加载类,我试图通过

设置classpath
clazz = Class.forName("-cp \"C:/dir\" distantinterfaces.DistantClass");

没有成功,ClassNotFoundException。远程班级的完整路径是:

C:/dir/distantinterfaces/DistantClass.class

3 个答案:

答案 0 :(得分:9)

为此使用URLClassLoader。代码可能是:

File f = new File("C:/dir");
URL[] cp = {f.toURI().toURL()};
URLClassLoader urlcl = new URLClassLoader(cp);
Class clazz = urlcl.loadClass("distantinterfaces.DistantClass");

答案 1 :(得分:3)

目录在类路径中,您可以使用Class.forName()(只接受fuly限定名称类,而不是-cp命令行选项),或者它不在类路径中,你应该然后使用自定义类加载器。

你不是说你真正想做什么(你为什么要动态加载类),但最好的办法是让目录在类路径中。

答案 2 :(得分:1)

您必须创建一个ClassLoader实例,该实例知道带有类的目录。请参阅stackoverflow questions tagged urlclassloader