`
iaiai
  • 浏览: 2204358 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

扫描给定包及子包内的所有类

    博客分类:
  • J2EE
 
阅读更多
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;

/**
 * 
 * <p>
 * Title: PackageUtils.java
 * </p>
 * <p>
 * E-Mail: 176291935@qq.com
 * </p>
 * <p>
 * QQ: 176291935
 * </p>
 * <p>
 * Http: iaiai.iteye.com
 * </p>
 * <p>
 * Create time: 2011-8-2
 * </p>
 * 
 * @author 丸子
 * @version 0.0.1
 */
public class PackageUtils {

	/**
	 * 扫描给定包及子包内的所有类
	 * 
	 * @param packageName
	 *            给定的包名
	 * @return The classes
	 * @throws ClassNotFoundException
	 * @throws IOException
	 */
	private static Class[] getClasses(String packageName)
			throws ClassNotFoundException, IOException {
		Class cla = PackageUtils.class;
		String path = packageName.replace('.', '/');
		Enumeration<URL> resources = cla.getClassLoader().getResources(path);
		List<File> dirs = new ArrayList<File>();

		while (resources.hasMoreElements()) {
			URL resource = resources.nextElement();
			dirs.add(new File(resource.getFile()));
		}
		ArrayList<Class> classes = new ArrayList<Class>();
		for (File directory : dirs) {
			classes.addAll(findClasses(directory, packageName));
		}
		return classes.toArray(new Class[classes.size()]);
	}

	/**
	 * 找到制定包内的所有class文件
	 * 
	 * @param directory
	 *            目录名称
	 * @param packageName
	 *            包名称
	 * @return The classes
	 * @throws ClassNotFoundException
	 */
	private 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()) {
				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;
	}

	/**
	 * @throws IOException
	 * @throws ClassNotFoundException
	 * 
	 */
	public static void main(String[] args) throws Exception {
		Class[] clas = PackageUtils.getClasses("org");
		for (Class cla : clas) {
			System.out.println(cla.getName());
		}
	}

}

分享到:
评论

相关推荐

    vb 写的局域网扫描 抓包 发包

    从给定的文件信息中,我们可以提炼出以下知识点: 1. VB编程实现局域网扫描:在VB(Visual Basic)编程环境中,可以通过调用Windows的网络服务API函数来实现局域网扫描。局域网扫描是指在局域网内探测有哪些设备...

    多任务网段扫描练习

    7. **收集结果**:所有线程完成后,汇总扫描结果,包括活跃主机的IP和域名信息。 在实际应用中,还需要考虑其他因素,如错误处理、超时设置、避免被目标网络视为攻击的策略等。此外,由于网络扫描可能涉及隐私和...

    通过java的反射技术获取,某个包路径下的类,并以表格形式打印类的属性注解注释及属性名称等

    在给定的场景中,我们需要实现的功能是遍历指定包路径下的所有类,获取它们的属性信息,包括属性的注解和注释,并以表格形式输出。 首先,我们需要通过`Package.getPackage(String name)`方法获取指定包名的Package...

    扫描转换多边形的扫描线算法代码

    对于每一条扫描线,查找所有与之相交的边,并进行处理。 4. **边处理**:对于每一对相邻且跨越扫描线的边,确定它们之间的填充区域。这可以通过检查它们的x坐标交叉点来完成。 5. **填充**:根据像素的扫描顺序...

    简单的扫描端口程序--无聊啊!

    3. 在每个线程内执行端口扫描操作,如发送网络请求并处理响应。 4. 收集并记录结果,如开放的端口、响应时间等。 5. 如果需要,可以设置超时机制以避免挂起的连接。 在编写这样的程序时,我们还需要考虑到错误处理...

    佳能一体机网络扫描指南

    根据给定的文件信息,我们可以提炼出一系列与佳能一体机网络扫描以及活动目录设置相关的IT知识点。以下是对这些知识点的详细阐述: ### 一、网络扫描基础 **网络扫描**是指通过网络连接扫描设备(如扫描仪)进行...

    计算机网络课程设计 多线程端口扫描器(TCP/UDP端口扫描)(java实现)带GUI界面

    2.2端口的有效范围是1~65535,在该范围内使用多线程机制循环创建客户端套接字对象,对某一地址(段)的主机端口进行扫描,若套接字没有发生异常,说明该端口打开并提供服务,返回该开放端口的类型(如UDP端口还是TCP...

    ScanFill_x扫描线算法_线扫描_

    《X扫描线算法详解及其应用》 X扫描线算法,是一种在二维图形处理中用于填充多边形的有效方法。该算法的基本思想是沿着水平方向,即X轴,以一定的顺序扫描,通过计算每条扫描线与多边形边界的交点,确定在屏幕上...

    局域网扫描获取IP和主机名

    1. **IP范围定义**:通常,我们会扫描一个特定的IP地址段,比如192.168.1.0/24,这表示192.168.1.1到192.168.1.254的所有IP。 2. **Ping功能**:VB可以使用`System.Net.NetworkInformation.Ping`类发送ICMP回显请求...

    区域填充的扫描线算法

    在给定的文件中,"区域填充的扫描线算法.sln"是一个Visual Studio解决方案文件,可能包含了实现扫描线算法的项目和源代码。"区域填充的扫描线算法"可能是源代码文件夹,其中包含了具体的C++或C#代码。"Release"目录...

    键盘扫描码大全

    从给定的文件中,我们可以看到各种按键的扫描码列表,包括功能键(如F1至F10)、主键盘区的字母与符号键、特殊键(如退格键、Tab键)以及右边数字键盘的按键等。例如,F1键的扫描码为`0x3b00`,而退格键的扫描码则为...

    五边形的扫描转换算法

    根据给定的信息,本文将详细解释“五边形的扫描转换算法”,并深入探讨该算法在计算机图形学中的实现方式。 ### 一、五边形扫描转换算法概述 #### 1.1 定义与背景 扫描转换算法是计算机图形学中一种用于绘制基本...

    C++实现目录扫描

    在给定的压缩包文件名`ScanFolder_nounicode`中,可能暗示了这个示例不支持Unicode编码。在Windows API中,通常建议使用Unicode版本的函数,如`FindFirstFileW`和`FindNextFileW`,它们可以正确处理各种字符集,特别...

    多边形的扫描转换

    在给定的示例代码中,`Drawing_2.cpp`和`Drawing_1.cpp`很可能是实现多边形扫描转换的具体程序。这些文件可能包含用C++编写的函数,用于定义多边形的顶点,然后使用OpenCV的绘图函数将这些顶点转换为屏幕上的多边形...

    扫描线填充算法,VC编写,很好用!

    这种算法的基本思想是通过水平扫描线遍历图形的边界,从而确定并填充图形内的所有像素。在VC++(Visual C++)这样的编程环境中,我们可以利用C++语言和Windows GDI库来实现扫描线填充。 首先,我们要理解扫描线填充...

    全国活跃IP段 扫描器的格式

    例如,在给定的部分内容中,“222.66.82.0-222.66.82.255”表示的是一个包含256个IP地址的C类网段。这种格式可以直接输入到X-scan中进行扫描,无需额外转换。 ### IP段扫描的应用场景 1. **网络安全审计**:企业或...

    端口扫描器

    在给定的“端口扫描器”项目中,我们关注的是一个使用Java编程语言,并结合Swing图形用户界面(GUI)和Socket网络编程实现的简单端口扫描器。以下是对这个Java端口扫描器的知识点详细解释: 1. **Java**: Java是一...

    portsacn.rar_扫描器_端口扫描器

    "all computer on the domain"可能是指扫描同一个域内的所有计算机,这是一个常见的安全审计任务,特别是在企业环境中。管理员可能需要定期扫描域内的所有系统,以确保网络的安全性。 "CRC32verify"涉及到校验和的...

    多边形扫描算法.rar

    在给定的"多边形扫描算法.rar"压缩包中,包含的VC++源码可能用于实现一种或多边形扫描转换算法。这种算法的主要目标是将一个多边形的边界内所有像素标记为填充颜色,从而在屏幕上显示出完整的形状。 在VC++环境中,...

    Microscan新系列小型图像扫描仪 在半导体和电子应用领域表现卓越.pdf

    通过建立一个包含蒸汽温度和压力的查询表,内插器可以计算出任意给定温度和压力下蒸汽的焓值,简化了计算过程,提高了效率。在这种情况下,使用5x5矩阵(如表2所示)进行内插计算,覆盖了0.2至5 MPa的压力范围和180...

Global site tag (gtag.js) - Google Analytics