`
fourfire
  • 浏览: 415162 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

查找包下所有的类

    博客分类:
  • Java
阅读更多
包括二级包,classes和jar的情况都考虑
/**
	 * 获得包下的类
	 * 
	 * @param packageName
	 *            The base package
	 * @return The classes
	 * @throws ClassNotFoundException
	 * @throws IOException
	 */
	public static Class[] getClasses(String packageName)
			throws ClassNotFoundException, IOException {
		ClassLoader classLoader = Thread.currentThread()
				.getContextClassLoader();
		assert classLoader != null;
		String path = packageName.replace('.', '/');
		Enumeration<URL> resources = classLoader.getResources(path);
		List<File> dirs = new ArrayList<File>();
		ArrayList<Class> classes = new ArrayList<Class>();
		while (resources.hasMoreElements()) {
			URL resource = resources.nextElement();
			String p = "";
			if (resource.getFile().indexOf("!") >= 0) {// 在其他的jar文件中
				p = resource.getFile().substring(0,
						resource.getFile().indexOf("!")).replaceAll("%20", "");
			} else {// 在classes目录中
				p = resource.getFile();
			}
			if (p.startsWith("file:/"))
				p = p.substring(6);
			if (p.toLowerCase().endsWith(".jar")) {

				JarFile jarFile = new JarFile(p);
				Enumeration<JarEntry> enums = jarFile.entries();
				while (enums.hasMoreElements()) {
					JarEntry entry = (JarEntry) enums.nextElement();
					String n = entry.getName();

					if (n.endsWith(".class")) {
						n = n.replaceAll("/", ".").substring(0, n.length() - 6);
						if (n.startsWith(packageName)) {

							classes.add(Class.forName(n));

						}
					}

				}
			} else {
				dirs.add(new File(p));
			}

		}

		for (File directory : dirs) {
			classes.addAll(findClasses(directory, packageName));
		}
		return classes.toArray(new Class[classes.size()]);
	}

	/**
	 * 查找一个文件夹下的文件
	 * 
	 * @param directory
	 *            The base directory
	 * @param packageName
	 *            The package name for classes found inside the base directory
	 * @return The classes
	 * @throws ClassNotFoundException
	 */
	public static List<Class> findClasses(File directory, String packageName)
			throws ClassNotFoundException {
		List<Class> classes = new ArrayList<Class>();
		if (!directory.exists()) {
			return classes;
		}
		File[] files = directory.listFiles();
		for (File file : files) {
			if (file.isDirectory()) {
				assert !file.getName().contains(".");
				classes.addAll(findClasses(file, packageName + "."
						+ file.getName()));
			} else if (file.getName().endsWith(".class")) {
				classes.add(Class.forName(packageName
						+ '.'
						+ file.getName().substring(0,
								file.getName().length() - 6)));
			}
		}
		return classes;
	}
分享到:
评论

相关推荐

    java 遍历指定包下所有类,返回完整类名。工具类,可以直接拷入使用

    资源分数必须最少填1,不好意思。如果没有积分可以去git链接下载,本人博客有git地址。博客地址:... java 遍历指定包下所有类,返回完整类名。工具类,可以直接拷入使用。

    类/包检索工具,查找类包和路径

    一个查找类的小工具 主要有两个用途: 1.检索类所在的文件(一般为.jar)。然后就可以把它加到classpath中。 2....在仅知道类名的情况下,检索出类的包路径,然后就可以正确书写import指令。

    C# 用递归的方式查找指定文件夹下的所有子目录

    通过以上讨论,我们了解到如何使用C#的递归方法查找文件夹下的所有子目录,并了解了相关的关键知识点,包括递归概念、文件操作、WinForm应用的构建以及项目配置。在实际开发中,可以根据具体需求进行调整和优化。

    java类查找小工具

    2. 搜索范围设定:用户可以选择搜索的目录,这通常包含项目的类路径(classpath)下的所有jar文件和目录。 3. 扫描jar文件和目录:工具遍历指定的目录,读取每个jar文件的META-INF/MANIFEST.MF文件来获取jar的主类和...

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

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

    Java 启动器如何查找类

    如果JAR作为扩展安装在`ext`子目录中,其`JAR-CLASS-PATH`将被忽略,因为假设所有扩展所需类都已经包含在内或作为扩展安装。 **旧版Java启动器**: 在Java 1.2之前的版本,启动器不支持Java扩展框架,类的查找过程...

    在jar包中查找class等文件

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

    JAR包查找工具

    在实际使用中,"JAR包查找工具"可以帮助开发者快速定位项目中使用的类,特别是在面临大量依赖库的情况下,能有效提高开发效率。例如,当遇到某个类的错误或需要了解其来源时,通过此工具可以迅速找到对应的JAR包,...

    Spring包下面的所有类

    Spring docs可以方便查找spring包下面的所包含的类,可以更适合应用哦

    FindJar-在jar包中查找包和类

    Java源代码,用于在jar包中查找包和类。

    java解压jar类查找工具

    此时,这款工具就显得尤为重要,它能够快速遍历指定目录下的所有jar和zip文件,查找匹配的class文件,且无需提供完整的包名,只需类名即可。 多线程是此工具实现高速查找的关键技术。通过创建多个线程并行处理文件...

    jar包重复查找工具2

    该工具的主要功能是分析指定目录下的所有jar包,找出其中可能重复的类。通过比较类之间的相似度,当相似度达到80%或以上时,工具将自动标记这些类可能存在重复。这种高相似度的设定确保了提示的准确性,减少了误报的...

    JarSearch,Java Class类所在的Jar包搜索器

    从选定的目录里面,查找出所有包含所指定的Java Class类的Jar包。 -------------------------------------------------------------------------- 使用方法: 1、请首先输入需要查找的Java Class类,需要输入完整的...

    C++模板类二叉查找树的实现

    这种性质使得查找、插入和删除操作在平均情况下具有O(log n)的时间复杂度。 在这个实现中,我们有两个关键文件:`TreeD.cpp`和`TreeH.h`。`TreeH.h`很可能是头文件,包含了二叉查找树模板类的定义,而`TreeD.cpp`则...

    通过import导入包查找所在jar包工具

    `表明我们打算使用`ArrayList`类,它位于`java.util`包下。如果没有`import`语句,我们需要在每个引用类的地方完全限定类名,如`java.util.ArrayList`. 要实现“找jar包工具”,这个工具可能包含以下步骤: 1. **...

    内容查找,根据指定的文件夹查找包含指定内容的文件(C#源码)

    要查找包含特定内容的文件,我们需要遍历指定文件夹下的所有文件,然后逐个读取它们的内容进行比对。 以下是一个简单的步骤概述: 1. 使用`Directory.GetFiles()`方法获取指定文件夹下的所有文件路径。 2. 对每个...

    JAVA类查找工具

    JAVA类查找工具是一款专为Java开发者设计的实用软件,它能帮助用户快速定位并查找Java类,无论是存在于JAR文件还是ZIP文件中。这个工具极大地方便了开发过程中的代码管理和调试,尤其当项目庞大,类库众多时,它的...

    基于数据库的查找类

    在IT行业中,数据库是存储和管理数据的核心工具,而基于数据库的查找类是与数据库交互的重要环节。这里的"基于数据库的查找类"主要是指设计一个Java类,它封装了对数据库进行查询操作的功能。这个类可能命名为`DbOp`...

    根据文件名称查找文件夹下的所有文件和子文件

    总结,这个任务的核心在于使用C#的文件系统操作类和递归算法,结合VS2008进行开发,实现根据文件名查找目录及其子目录下的所有匹配文件。这个过程中涉及到了文件系统API、编程逻辑设计和异常处理等多个方面,是C#...

    查找类型类浏览器应用程序示例

    标题中的“查找类型类浏览器应用程序示例”暗示我们讨论的主题是关于一种特定类型的软件应用,即浏览器应用程序,它可能涉及到程序设计中的类型类查找机制。这类应用可能用于搜索和显示不同种类的数据,如网页、文件...

Global site tag (gtag.js) - Google Analytics