java 如何使用反射 加载指定路径下的类文件(.class)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 如何使用反射 加载指定路径下的类文件(.class)相关的知识,希望对你有一定的参考价值。
简单写了下,不知道是不是你要的。import java.lang.reflect.Method;
import com.sun.org.apache.bcel.internal.util.ClassLoader;
public static void main(String[] args) throws Exception
ClassLoader classLoader = new ClassLoader( new String[] "D:\\Cheiron\\Test\\bin" );//类根路径
Class<?> cl = classLoader.loadClass("org.apache.commons.lang.StringUtils");//类名
Method method = cl.getMethod("split", String.class, String.class);//类的方法
System.out.println(method.getName());//打印方法名
String[] arrS = (String[]) method.invoke(null, "a,a", ",");//调用方法
for (String string : arrS) //打印返回值
System.out.println(string);
参考技术A Class cls = Class.forName(name);//获取测试案例的类
Object obj = cls.newInstance();//创建该类实例
其中name就是指定路径下的类文件,记住必须写包名。
如name = test.HelloWord即可.追问
类文件不在项目工程下!何来包名?
追答如果只有.class文件的话,不好意思,我不知道怎么用java使用反射,不过建议你可以去下载阅读有关字节码文件的软件"ClassLib",用法和下载在http://wenku.baidu.com/view/23692b60ddccda38376baf4f.html可以看到。其他的我就帮不上什么忙了。
参考技术B Class.forName(包名加类名)如何加载指定路径的Logback.xml
相对路径的话,可以先获取到当前文件的编译路径,之后在找到想找文件的路径的思路来实现。举例:
XMLS.class.getClass().getResourceAsStream("/test/test.xml");
解释:XMLS.class.getClass()是获取当前的类编译路径,之后通过getResourceAsStream的形式即可找到要读取的文件的路径。
备注:这个方法中后面的路径也可以通过截取的形式来进行路径获取,实现原理都是找到当前类路径,之后通过相对位置找到另外文件路径。 参考技术A 代码 File logbackFile = new File("./conf/logback.xml"); if (logbackFile.exists()) LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory(); JoranConfigurator configurator = new JoranConfigurator(); configurator.setContext(lc); lc.reset(); try configurator.doConfigure(logbackFile); catch (JoranException e) e.printStackTrace(System.err); System.exit(-1); 但是老师不按照策略输出,整了两小时,开始以为lc.reset()放错位置了,但是后来发现是我的JoranConfigurator这个类引用错了,正确的类路径是 ch.qos.logback.classic.joran.JoranConfigurator 但是我错误引用了 ch.qos.logback.access.joran.JoranConfigurator 哭死的节奏,debug到代码里面怎么就说没有处理contextName的Action,原来ch.qos.logback.access只处理基本的配置,上下文这个处理在logback-classic里面,究其原因是因为eclipse的自动提示,我下意识就选了第一个,这也算桑踹个检讨书吧.
以上是关于java 如何使用反射 加载指定路径下的类文件(.class)的主要内容,如果未能解决你的问题,请参考以下文章