根据反射技术得到jar包中所有类,以及方法

<p>函数背景:希望得到jar包中所有函数和包名,便于在客户端以树型结构展示</p>
<p>public static List<String[]> getJarMethod(String jarFile) throws Exception {<br> String NORMAL_METHOD= "waitequalsnotifynotifyAlltoStringhashCodegetClass"; <br> List<String[]> a = new ArrayList<String[]>();<br> try {</p>
<p> //通过jarFile 和JarEntry得到所有的类<br> JarFile jar = new JarFile(jarFile);//"D:/sip-test.jar"<br> Enumeration e = jar.entries();<br><br> while (e.hasMoreElements()) {<br> JarEntry entry = (JarEntry) e.nextElement();<br> //entry.getMethod()<br> if (entry.getName().indexOf("META-INF") < 0) {<br> String sName = entry.getName();<br> String substr[] = sName.split("/");<br> String pName = "";<br> for (int i = 0; i < substr.length - 1; i++) {<br> if (i > 0)<br> pName = pName + "/" + substr[i];<br> else<br> pName = substr[i];<br> }<br> if (sName.indexOf(".class") < 0)<br> {<br> sName = sName.substring(0, sName.length() - 1);<br> }<br> else<br> {</p>
<p> //通过URLClassLoader.loadClass方法得到具体某个类 <br> URL url1=new URL("file:D://sip-test.jar");<br> URLClassLoader myClassLoader=new URLClassLoader(new URL[]{url1},Thread.currentThread().getContextClassLoader());<br> String ppName = sName.replace("/", ".").replace(".class", "");<br> Class myClass = myClassLoader.loadClass(ppName);</p>
<p> //通过getMethods得到类中包含的方法<br> Method m[] = myClass.getMethods();<br> for(int i=0; i<m.length; i++)<br> {<br> String sm = m[i].getName();<br> if (NORMAL_METHOD.indexOf(sm) <0)<br> {<br> String[] c = {sm, sName};<br> a.add(c);<br> }<br> }<br> }<br> String[] b = { sName, pName };<br> a.add(b);<br> }<br> }<br> return a;<br> } catch (IOException e) {<br> // TODO Auto-generated catch block<br> e.printStackTrace();<br> }<br> return a;<br> }</p>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值