`
MouseLearnJava
  • 浏览: 460646 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

从jar包中搜寻拥有某个方法的所有class

阅读更多

看到一个问题,"一个jar包有很多的class,但是,唯一知道的只是一个方法名,怎么样知道哪一个或哪些class拥有这个方法呢?"

我想我们可以通过如下的步骤来实现:

1. 获取jar包中所有的JarEntry
2. 检查每一个JarEntry的name,如果name是以'.class'结尾,那么,获取class名字
3. 使用第2步中得到的class名字,通过反射获取Method数组。
4. 循环Method数组,如果发现方法名与已知的方法名一致,则在控制台输出该类的class name。

基于上述思想,我写了一个小程序,并去跑了一个实例--> 在jar包 'commons-lang-2.4.jar'中查找拥有方法名 'removeCauseMethodName' 的class。

控制台输出的结果如下:
Method [removeCauseMethodName] is included in Class [org.apache.commons.lang.exception.ExceptionUtils]

具体的代码如下:

注意: 运行如下程序之前请先把'commons-lang-2.4.jar' 添加到build path中,然后根据自己的workspace环境指定该jar包的具体路径。

import java.io.IOException;
import java.lang.reflect.Method;
import java.util.Enumeration;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;

public class SearchMetodInJarFile {

	private static final String CLASS_SUFFIX = ".class";

	public static void main(String[] args) throws IOException,
			SecurityException, ClassNotFoundException {

		/** target method name to be searched */
		String targetMethodClass = "removeCauseMethodName";

		/**
		 * Specify a target method name as 'removeCauseMethodName'. Find class
		 * name that includes the target method name in Jar File.
		 */
		new SearchMetodInJarFile().searchMethodName(new JarFile(
				"D:\\Develop\\workspace\\Test\\commons-lang-2.4.jar"),
				targetMethodClass);

	}

	/**
	 * Search target method name in multiple Jar files.
	 */
	public void searchMethodName(JarFile[] jarFiles, String targetMethodName)
			throws SecurityException, ClassNotFoundException {

		for (JarFile jarFile : jarFiles) {
			searchMethodName(jarFile, targetMethodName);
		}
	}

	/**
	 * Search target method name in one Jar file.
	 */
	public void searchMethodName(JarFile jarFile, String targetMethodName)
			throws SecurityException, ClassNotFoundException {
		Enumeration<JarEntry> entryEnum = jarFile.entries();
		while (entryEnum.hasMoreElements()) {
			doSearchMethodName(entryEnum.nextElement(), targetMethodName);
		}
	}

	/**
	 * Check the name of JarEntry, if its name ends with '.class'. Then do the
	 * following 3 steps: 1. Populate Class name. 2. Get the methods by
	 * reflection. 3. Compare the target method name with the names. If the
	 * methood name is equal to target method name. Then print the method name
	 * and class name in console.
	 */
	private void doSearchMethodName(JarEntry entry, String targetMethodName)
			throws SecurityException, ClassNotFoundException {
		String name = entry.getName();
		if (name.endsWith(CLASS_SUFFIX)) {
			/**
			 * Populate the class name
			 */
			name = name.replaceAll("/", ".")
					.substring(0, name.lastIndexOf("."));

			/**
			 * Retrieve the methods via reflection.
			 */
			Method[] methods = Class.forName(name).getDeclaredMethods();
			for (Method m : methods) {
				/**
				 * Print the message in console if the method name is expected.
				 */
				if (targetMethodName.equals(m.getName())) {
					System.out.println(String.format(
							"Method [%s] is included in Class [%s]",
							targetMethodName, name));
					break;
				}
			}

		}
	}
}
1
4
分享到:
评论

相关推荐

    在jar包中查找class等文件

    2.搜索分析指定路径下所有jar包中是否存在指定文件。譬方说要在jar包中查询目个**.class文件。用户可以不用打开Jar包,直接输入路径和要查找的文件即可搜索。 3.除了对Jar包进行搜索分析外,还可以对zip包进行分析 4...

    JarClassSearch class 文件搜索工具,可以查找出指定名称的class出现了哪些jar包中

    JarClassSearch class 文件搜索工具,可以查找出指定名称的class出现了那些jar包中 对jar包上了数量的工程特别有用,而且是GUI界面的 真是人见人爱,见人爱人,javaer 的居家旅行必备

    根据class类名在所有Jar包文件中查找class类路径以及jar名字

    1.搜索分析指定路径下所有jar包中是否存在指定文件。譬方说要在jar包中查询某个**.class文件。用户可以不用打开Jar包,直接输入路径和要查找的文件即可搜索。 2.列出指定路径下的所有Jar包文件 3.除了对Jar包进行...

    遇到jar包冲突时,需要找某个class文件在哪几个jar包中,可以用这个工具进行查找,很快速方便的

    遇到jar包冲突时,需要找某个class文件在哪几个jar包中,可以用这个工具进行查找,很快速方便的

    CodeReviewTools:通过正则搜索、批量反编译特定Jar包中的class名称

    CodeReviewTools :party_popper: 介绍 ...通过正则直接反编译拥有特定groupId的jar包到某个目录 CodeReviewTools v1.0 by Ppsoft1991 usage: java -jar CodeReviewTools.jar -m -d,--dir &lt;arg&gt; ta

    EveryClass

    快速搜索jar包中的类 在jar包中找到config.properties 其中 dirPath设置jar包所在的文件夹 indexDir设置索引所在的文件夹。 打开cmd ,输入java -jar 该jar包的路径 例如:java -jar D:\work\自己\everyclass\...

    Eclipse反编译插件和安装方法

    资源中包含jad.exe以及反编译jar包,包含反编译的安装方法,使用时可以使用ctrl + 鼠标左键进入封装在jar包中的方法。具体安装方法在压缩包中的word文档中。 安装方法: 1. 将net.sf.jadclipse_3.3.0.jar 拷贝到...

    jclasslib 工具修改.class文件,同时需要jad.exe做辅助

    修改jar包中变量 或者长量 步骤如下: 1.用jd-gui打开该jar 怎么打开不用我说了吧? 打开之后找到 要修改提示信息 的class文件 这里找到的是GenEntity 找到对应需要修改的代码所在的方法名 我这里包含提示信息的这段...

    java反编译

    从myeclipse中打开含有class的project,通过快捷键ctrl+shift+type查找到java类文件(搜索jar包和src目录),在弹出的窗口中,输入已有的类名,双击即可看到反编译jar包中任意class文件的效果。 此外,还有一款比...

    MyEclipse2015Stable2.0破解

    PhonegapProjectManagerImpl$2.class(搜索,删除,两个都干掉) 接下来就可以用了 想要多版本共存的,有两种方法,一种是备份 .myeclipse.properties 这个文件(保存的注册信息),然后根据你想要用的版本去换 另一...

    java微信公众号MVC开发框架

    通过maven生成一个webapp项目,例如项目名为weixin,在maven配置文件pom.xml中添加jwx依赖,jwx的1.1.1jar包已经提交到maven中心仓库,通过中心仓库搜索jwx关键字可以获取jar包依赖配置。 &lt;groupId&gt;...

    开发项目用SWING与RCP与SWT.JFACE的分析

    SWT是作为Eclipse开发环境的一个插件形式存在,可以在${你的eclipse安装路径}\plugins路径下的众多子目录下去搜索SWT.JAR文件,在找到的JAR文件中包含了SWT全部的Java类文件。因为SWT应用了JNI技术,因此同时也要...

    java 面试题 总结

    Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。 10、&和&&的区别。 &是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and)。 11、HashMap...

    反编译插件

    包含jad.exe和net.sf.jadclipse_3.3.0.jar两个插件。将jad放入java安装包中jdk/bin中,将net.sf.jadclipse_3.3.0放入Eclipse中plugins包中。...然后在Eclipse中的窗口-首选项-中搜索jadclipse,添加路径即可

    超级有影响力霸气的Java面试题大全文档

    Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。 13、&和&&的区别。 &是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and)。 14、...

    手机 pdf 阅读器

    自定义问候语(系统路径下dictum.rc文件,格式参见jar包中的dictum.rc文件,保存时使用UTF-8编码,可写条目为0~9/a~z/A~Z,置空时表示不显示问候语) ·修正:  0键在各偏好中切换时亮度混乱的问题  部分手机上无法...

    新版Android开发教程.rar

    蓝牙 (class 1) ;四频 (850 , 900 , 1800 , 1900) ;支持 3G , 802.11b 和 802.11g 。----------------------------------- Android 编程基础 5 互联网 支持 HTTP 、 WAP Push 和 xHTML ;支持 POP 、 IMAP 、 ...

    javaSE代码实例

    14.1 Object类——所有类的超类 270 14.1.1 toString方法的重写 270 14.1.2 equals方法的意义 271 14.1.3 hashCode方法的意义 272 14.2 重写equals与hashCode方法 273 14.2.1 重写equals方法 273 14.2.2...

    网管教程 从入门到精通软件篇.txt

    网管教程 从入门到精通软件篇 ★一。★详细的xp修复控制台命令和用法!!! 放入xp(2000)的光盘,安装时候选R,修复! Windows XP(包括 Windows 2000)的控制台命令是在系统出现一些意外情况下的一种非常有效的...

Global site tag (gtag.js) - Google Analytics