java反射查看jar包中所有的类名方法名
不反编译,不用其他工具,用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包中所有的类名方法名的更多相关文章
- 【转】Eclipse中查看jar包中的源码
(简单的方式:通过jd-gui来进行反编译,最简单!,参考我的另一篇博文, 地址:http://www.cnblogs.com/gmq-sh/p/4277991.html) Java Decompil ...
- Eclipse中如何快速查看jar包中 的class源码
我们查看jar源码时,一般是安装个jd-gui,把jar拷出来,然后从jd-gui中打开jar再查看源码,这个过程不免有些麻烦,当然,本篇所讲的快速查看的方法也没什么高科技手段,只是将jd-gui集成 ...
- java指定运行jar包中的其中一个main方法
java -cp jar包 类名 java -cp ******.jar com.******.EsEtl
- idea中如何查看jar包中的源码(非maven),以oracle的ojdbc为例
文章目录 背景 解决 背景 工作需要查看oracle的部分源码(ojdbc.jar),maven并没有这个依赖,单纯的导入jar包无法查看. 解决 将ojdbc.jar 安装到本地仓库,maven从本 ...
- eclipse查看jar包中class的中文注释乱码问题的解决
1,问题来源是在eclipse中直接查看springside的class(由eclipse自动反编译)里面注释的乱码问题: Preferences-General-Workspace-Text fil ...
- eclipse查看jar包中的class文件出现乱码
参考:http://blog.csdn.net/bell2008/article/details/40978959 1,问题来源是在eclipse中直接查看springside的class(由ecli ...
- java项目部署之后,Jar包中配置文件修改
Java项目发布时,配置文件不像.net项目一样与工程路径保持一致,而是直接包含在了jar包中,此时要修改就没那么方便了,我们可以将配置文件从jar包抽离出来,修改完之后再写入Jar包即可, 也没那么 ...
- java 执行 jar 包中的 main 方法
java 执行 jar 包中的 main 方法 通过 OneJar 或 Maven 打包后 jar 文件,用命令: java -jar ****.jar执行后总是运行指定的主方法,如果 jar 中有多 ...
- java 从jar包中读取资源文件
在代码中读取一些资源文件(比如图片,音乐,文本等等),在集成环境(Eclipse)中运行的时候没有问题.但当打包成一个可执行的jar包(将资源文件一并打包)以后,这些资源文件找不到,如下代码: Jav ...
随机推荐
- PhoenixFD插件流体模拟——UI布局【Splash | Mist】详解
液体飞溅 | 水雾 本文主要讲解Splash | Mist折叠栏中的内容.原文地址:https://docs.chaosgroup.com/display/PHX3MAX/Liquid+Splash+ ...
- Python学习—数据库篇之SQL语句
一.数据库级别 1.显示数据库 show databases; 默认数据库: mysql - 用户权限相关数据 test - 用于用户测试数据 information_schema - MySQL本身 ...
- Ubuntu 通过apt安装VSCode
1. sudo vim /etc/apt/sources.list.d/vscode.list 并向里面添加:deb [arch=amd64] http://packages.microsoft.co ...
- 摘选改善Python程序的91个建议
1.理解Pythonic概念 Pythonic Tim Peters 的 <The Zen of Python>相信学过 Python 的都耳熟能详,在交互式环境中输入import thi ...
- OSPFv3综合实验(GNS3)
一.实验目的 1. 掌握 OSPFv3(v2) 的配置方法 2. 掌握在帧中继环境下 OSPFv3 (v2)的配置方法 3. 掌握 OSPFv3(v2) NSSA 的配置方法 4. 掌握外部路 ...
- @ManyToMany的学习
新建了一个manyToMany的学生-课程表,学生可以选择多个课程,多个课程可以被学生选.尝试如下代码,创建了两个list,然后新建对象,加入list,然后set<list>,报错,这是因 ...
- laravel路由无法访问,报404,No query results for model [App\Models\...]
今天遇到了一个问题,在routes/web.php中配置了路由,但始终无法访问该路由,一直报404. Route::resource('gift_packs', 'GiftPacksControlle ...
- 十四、new Comparator<T>实现多重排序结果
1.编写实现类 package com.abcd; public class Person{ private String name; private int age; private int sal ...
- vue 增删改查
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- centos-1 nginx
常用命令 su #切换用户mkdir flodr #创建目录rm -r flodr #删除文件/目录,有提示rm -rf flodr #删除文件/目录,无提示pwd #查看当前路径 防火墙设置 ht ...