Java从包中读取所有的class文件

该博客介绍了一个Java工具类`PackageUtil`,用于从指定的包名中动态获取所有的Class文件。它通过扫描文件系统和JAR文件,将所有匹配的类添加到集合中。该方法适用于加载自定义视图类或其他需要按包加载的场景。
摘要由CSDN通过智能技术生成
package org.b3mn.poem.util;

import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
import java.net.URL;
import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.Set;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;

public class PackageUtil {
	/**  
     * 从包package中获取所有的Class  
     *   
     * @param pack  
     * @return  
	 * @throws  
     */  
    public static Set<Class<?>> getClasses(String pack) {   
  
        // 第一个class类的集合   
        Set<Class<?>> classes = new LinkedHashSet<Class<?>>();   
        // 是否循环迭代   
        boolean recursive = true;   
        // 获取包的名字 并进行替换   
        String packageName = pack;   
        String packageDirName = packageName.replace('.', '/');  
        // 定义一个枚举的集合 并进行循环来处理这个目录下的things   
        Enumeration<URL> dirs;   
        try {   
            dirs = Thread.currentThread().getContextClassLoader().getResources(packageDirName);   
            // 循环迭代下去   
            while (dirs.hasMoreElements()) {   
                // 获取下一个元素   
                URL url = dirs.nextElement();   
                // 得到协议的名称   
                String protocol = url.getProtocol();
                // 如果是以文件的形式保存在服务器上   
                if ("file".equals(protocol)) {
                    //System.err.println("file类型的扫描");   
                    // 获取包的物理路径   
                    String filePath = URLDecoder.decode(url
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值