java反射查看jar包中所有的类名方法名
2017-03-17 15:43
148 查看
不反编译,不用其他工具,用java反射查看jar包中所有的类名方法名,网上很多都报错,下面这个你试试看:话不多说直接撸代码:
1 import java.lang.reflect.Field; 2 import java.lang.reflect.Method; 3 import java.net.URL; 4 import java.net.URLClassLoader; 5 import java.util.Enumeration; 6 import java.util.HashMap; 7 import java.util.List; 8 import java.util.Map; 9 import java.util.jar.JarEntry; 10 import java.util.jar.JarFile; 11 12 13 14 public class JarUtil extends URLClassLoader { 15 /** 16 * 这些默认方法不打印 17 */ 18 private static String DEFAULT_METHOD = "waitequalsnotifynotifyAlltoStringhashCodegetClass"; 19 20 public JarUtil(URL url) { 21 super(new URL[] { url }); 22 } 23 24 /** 25 * 获取jar中某个class 26 * 27 * @param jarPath 28 * @param classPath 29 * @return 30 */ 31 @SuppressWarnings({ "rawtypes", "resource" }) 32 public static Object getClassObject(String jarPath) { 33 try { 34 if(jarPath.indexOf("file:///")<0){ 35 jarPath = "file:///"+jarPath; 36 } 37 URL url = new URL(jarPath); 38 JarUtil t = new JarUtil(url); 39 Map<String,List<String>> rtnList = new HashMap<String,List<String>>(); 40 //通过jarFile和JarEntry得到所有的类 41 JarFile jar = new JarFile(jarPath.replace("file:///","")); 42 //返回zip文件条目的枚举 43 Enumeration<JarEntry> enumFiles = jar.entries(); 44 JarEntry entry; 45 46 //测试此枚举是否包含更多的元素 47 while(enumFiles.hasMoreElements()){ 48 entry = (JarEntry)enumFiles.nextElement(); 49 if(entry.getName().indexOf("META-INF")<0 && entry.getName().indexOf("eclipse")<0 && entry.getName().indexOf(".class")>=0){ 50 String classFullName = entry.getName(); 51 //去掉后缀.class 52 String className = classFullName.substring(0,classFullName.length()-6).replace("/", "."); 53 System.out.println("~~~~~~~~~~~~~~~Class名称:" + className); 54 55 Class c ; 56 try { 57 c= t.findClass(className); 58 } catch (LinkageError e) { 59 c = Class.forName(className); 60 } 61 62 //根据class对象获得属性 63 Field[] fields = c.getDeclaredFields(); 64 for(Field f1 : fields){ 65 //打印每个属性的类型 66 System.out.println("~~~~~~~~~~~~~~~属性类型:" + f1.getType()); 67 //打印每个属性的名字 68 System.out.println("~~~~~~~~~~~~~~~属性名称:" + f1.getName()); 69 } 70 //通过getMethod得到类中包含的方法 71 Method methods[] = c.getMethods(); 72 for (Method method : methods) { 73 String sm = method.getName(); 74 //打印除默认方法外的方法 75 if(DEFAULT_METHOD.indexOf(sm)<0){ 76 System.out.println("方法名:" + sm); 77 } 78 79 } 80 81 } 82 } 83 84 } catch (Exception ex) { 85 ex.printStackTrace(); 86 } 87 return null; 88 } 89 90 public static void main(String[] args) throws Exception { 91 92 getClassObject("file:///C:\\Users\\zhang\\Desktop\\testrobot.jar"); 93 } 94 }
相关文章推荐
- 利用反射打印出 Jar包中所有的类名和方法
- java查看一个类地所有方法
- Java反射代码--05.执行所有get方法
- Java反射常用到的几个方法,获取Private字段,执行其他类的方法,获取类名
- java通过反射+javassist获得方法所有信息(返回值、方法名、参数类型列表、参数列表)
- Java去除掉HTML里面所有标签的两种方法——开源jar包和自己写正则表达式
- 根据反射技术得到jar包中所有类,以及方法
- 使用反射创建Bean、Spring中是如何根据类名配置创建Bean实例、Java提供了Class类获取类别的字段和方法,包括构造方法
- java反射:根据给定类名实例化类并调用其方法
- Java利用反射查看类属性和方法例子
- java进阶之反射:反射基础之如何获取一个类以及如何获取这个类的所有属性和方法(2)
- Java 中 方法名或类名 变更 同时 更新 所有引用的 类名或方法名 的解决方案
- Java反射代码--07.根据字段调用所有set方法
- java反射调用指定jar包中的类和方法
- 根据反射技术得到jar包中所有类,以及方法
- Java反射代码--03.得到某类的所有方法
- 根据反射技术得到jar包中所有类,以及方法
- java 利用反射机制,获取实体所有属性和方法,并对属性赋值
- Java--Reflect(反射)专题3——获取类的方法的所有信息
- java 利用反射机制,获取实体所有属性和方法,并对属性赋值