不反编译,不用其他工具,用java反射查看jar包中所有的类名方法名,网上很多都报错,下面这个你试试看:话不多说直接撸代码:

 import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.jar.JarEntry;
import java.util.jar.JarFile; public class JarUtil extends URLClassLoader {
/**
* 这些默认方法不打印
*/
private static String DEFAULT_METHOD = "waitequalsnotifynotifyAlltoStringhashCodegetClass"; public JarUtil(URL url) {
super(new URL[] { url });
} /**
* 获取jar中某个class
*
* @param jarPath
* @param classPath
* @return
*/
@SuppressWarnings({ "rawtypes", "resource" })
public static Object getClassObject(String jarPath) {
try {
if(jarPath.indexOf("file:///")<0){
jarPath = "file:///"+jarPath;
}
URL url = new URL(jarPath);
JarUtil t = new JarUtil(url);
Map<String,List<String>> rtnList = new HashMap<String,List<String>>();
//通过jarFile和JarEntry得到所有的类
JarFile jar = new JarFile(jarPath.replace("file:///",""));
//返回zip文件条目的枚举
Enumeration<JarEntry> enumFiles = jar.entries();
JarEntry entry; //测试此枚举是否包含更多的元素
while(enumFiles.hasMoreElements()){
entry = (JarEntry)enumFiles.nextElement();
if(entry.getName().indexOf("META-INF")<0 && entry.getName().indexOf("eclipse")<0 && entry.getName().indexOf(".class")>=0){
String classFullName = entry.getName();
//去掉后缀.class
String className = classFullName.substring(0,classFullName.length()-6).replace("/", ".");
System.out.println("~~~~~~~~~~~~~~~Class名称:" + className); Class c ;
try {
c= t.findClass(className);
} catch (LinkageError e) {
c = Class.forName(className);
} //根据class对象获得属性
Field[] fields = c.getDeclaredFields();
for(Field f1 : fields){
//打印每个属性的类型
System.out.println("~~~~~~~~~~~~~~~属性类型:" + f1.getType());
//打印每个属性的名字
System.out.println("~~~~~~~~~~~~~~~属性名称:" + f1.getName());
}
//通过getMethod得到类中包含的方法
Method methods[] = c.getMethods();
for (Method method : methods) {
String sm = method.getName();
//打印除默认方法外的方法
if(DEFAULT_METHOD.indexOf(sm)<0){
System.out.println("方法名:" + sm);
} } }
} } catch (Exception ex) {
ex.printStackTrace();
}
return null;
} public static void main(String[] args) throws Exception { getClassObject("file:///C:\\Users\\zhang\\Desktop\\testrobot.jar");
}
}

java反射查看jar包中所有的类名方法名的更多相关文章

  1. 【转】Eclipse中查看jar包中的源码

    (简单的方式:通过jd-gui来进行反编译,最简单!,参考我的另一篇博文, 地址:http://www.cnblogs.com/gmq-sh/p/4277991.html) Java Decompil ...

  2. Eclipse中如何快速查看jar包中 的class源码

    我们查看jar源码时,一般是安装个jd-gui,把jar拷出来,然后从jd-gui中打开jar再查看源码,这个过程不免有些麻烦,当然,本篇所讲的快速查看的方法也没什么高科技手段,只是将jd-gui集成 ...

  3. java指定运行jar包中的其中一个main方法

    java -cp jar包 类名 java -cp ******.jar com.******.EsEtl

  4. idea中如何查看jar包中的源码(非maven),以oracle的ojdbc为例

    文章目录 背景 解决 背景 工作需要查看oracle的部分源码(ojdbc.jar),maven并没有这个依赖,单纯的导入jar包无法查看. 解决 将ojdbc.jar 安装到本地仓库,maven从本 ...

  5. eclipse查看jar包中class的中文注释乱码问题的解决

    1,问题来源是在eclipse中直接查看springside的class(由eclipse自动反编译)里面注释的乱码问题: Preferences-General-Workspace-Text fil ...

  6. eclipse查看jar包中的class文件出现乱码

    参考:http://blog.csdn.net/bell2008/article/details/40978959 1,问题来源是在eclipse中直接查看springside的class(由ecli ...

  7. java项目部署之后,Jar包中配置文件修改

    Java项目发布时,配置文件不像.net项目一样与工程路径保持一致,而是直接包含在了jar包中,此时要修改就没那么方便了,我们可以将配置文件从jar包抽离出来,修改完之后再写入Jar包即可, 也没那么 ...

  8. java 执行 jar 包中的 main 方法

    java 执行 jar 包中的 main 方法 通过 OneJar 或 Maven 打包后 jar 文件,用命令: java -jar ****.jar执行后总是运行指定的主方法,如果 jar 中有多 ...

  9. java 从jar包中读取资源文件

    在代码中读取一些资源文件(比如图片,音乐,文本等等),在集成环境(Eclipse)中运行的时候没有问题.但当打包成一个可执行的jar包(将资源文件一并打包)以后,这些资源文件找不到,如下代码: Jav ...

随机推荐

  1. 常用vi命令

    i  在当前光标处插入字符,并进入编辑模式 o 在当前光标插入下一行 x 从当前光标处向后删除一个字符. dd 删除当前光标处所在行 :q! 强制退出不保存 :q 退出(文本有改动则警告) :w 保存 ...

  2. d3.js svg中 g 标签问题一览

    svg 中的g标签, 算是比较特殊 1 没有x y属性 2 没有width height 属性 3 不能fill 4 .... g标签基本只管分组问题, 其他功能一概不提供 要解决这些问题, 直接在g ...

  3. [Solution] 821. Shortest Distance to a Character

    Difficulty: Easy Problem Given a string S and a character C, return an array of integers representin ...

  4. CentOS7 yum安装配置 drbd-84-utils (外部模式)

    1 安装环境介绍 1.1 系统环境 内核:3.10.0-862.el7.x86_64  版本:CentOS Linux release 7.5.1804 (Core) 主服务器:hostname = ...

  5. CV迅速发展

  6. 递归可视化之汉诺塔的动画实现(turtle海龟)

    import turtle class Stack: def __init__(self): self.items = [] def isEmpty(self): def push(self, ite ...

  7. 2018-2019-2 20165315《网络对抗技术》Exp2 后门原理与实践

    2018-2019-2 20165315<网络对抗技术>Exp2 后门原理与实践 一.实验任务 使用netcat获取主机操作Shell,cron启动 使用socat获取主机操作Shell, ...

  8. 设计模式之jdk动态代理模式、责任链模式-java实现

    设计模式之JDK动态代理模式.责任链模式 需求场景 当我们的代码中的类随着业务量的增大而不断增大仿佛没有尽头时,我们可以考虑使用动态代理设计模式,代理类的代码量被固定下来,不会随着业务量的增大而增大. ...

  9. windows下的mongodb安装与配置

    一.下载mongodb安装文件 https://www.mongodb.com/download-center/community 选择zip压缩包方式,如:mongodb-win32-x86_64- ...

  10. CSS3--2D&3D的使用

    transform 过渡属性 向元素进行2D或3D转换 transform-origin:该元素基于某个点来旋转  transform-style: preserve-3d 规定嵌套元素如何在3D空间 ...