通过项目下的包名获取包下的全部类

news/2024/11/17 17:43:49/

通过项目下的包名获取包下的全部类

关键点:
ClassLoader.getResources()
返回给定包目录下所有资源。
是一个非静态方法,它只能通过类对象访问,如果我们尝试使用类名访问方法,那么我们将得到一个错误。
方法可能在返回资源时抛出异常。

方法的返回类型是Enumeration,它返回用于扫描资源的 URL 对象的枚举,否则当给定的资源不存在时返回 null。

public static Set classes = new HashSet<>(); 

public static void main(String[] args) { 
        String packageName = "cn.jet";                                                                                                 
        Enumeration<URL> dirs = null;                                                                                                  
        try {                                                                                                                          
            dirs = Thread.currentThread().getContextClassLoader().getResources(packageName.replace(".", "/"));                         
        } catch (IOException e) {                                                                                                      
            e.printStackTrace();                                                                                                       
                                                                                                                                       
        }                                                                                                                              
        System.out.println(dirs);                                                                                                      
        while (dirs.hasMoreElements()) {                                                                                               
            //获取物理路径                                                                                                                   
            System.out.println("ssss");                                                                                                
            String filePath = dirs.nextElement().getFile();                                                                            
            System.out.println(filePath);                                                                                              
            findClassByPackageName(filePath,packageName,classes);                                                                      
        }  

}


    public static void findClassByPackageName(String classPath, String rootPackageName, Set classes) {                                                                                      
        File file = new File(classPath);                                                                                                                    
        if (!file.exists())                                                                                                                                                                 
            return;                                                                                                                                                                         
        if (file.isDirectory()) {                                                                                                                                                           
            File[] list = file.listFiles();                                                                                                                                                 
            //如果是文件夹就需要在包名后面添加文件名                                                                                                                                                           
            for (File path : list) {                                                                                                                                                        
                if (path.isDirectory()) {                                                                                                                                                   
                    findClassByPackageName(path.getAbsolutePath(), rootPackageName + "." + path.getName(), classes);                                                                        
                } else {                                                                                                                                                                    
                    findClassByPackageName(path.getAbsolutePath(), rootPackageName, classes);                                                                                               
                }                                                                                                                                                                           
            }                                                                                                                                                                               
        } else {                                                                                                                                                                            
            if (file.getName().endsWith(".class")) {                                                                                                                                        
                String className = file.getName().substring(0, file.getName().length() - 6);                                                                                                
                try {                                                                                                                                                                       
                    System.out.println(rootPackageName + '.' + className);                                                                                                                  
                    classes.add(Thread.currentThread().getContextClassLoader().loadClass(rootPackageName + '.' + className));                                                               
                } catch (ClassNotFoundException e) {                                                                                                                                        
                    e.printStackTrace();                                                                                                                                                    
                }                                                                                                                                                                           
            }                                                                                                                                                                           
        }                                                                                                                                                                                 
    }  


http://www.ppmy.cn/news/4945.html

相关文章

2023年大学毕业生,我有话想对你说

虽然每年都说大学毕业生有多少多少&#xff0c;就业难&#xff0c;但貌似以往的经济寒冬&#xff0c;互联网寒冬都不如2022年2023年这么寒冷。 可以说&#xff0c;2022年一整年都是在裁员的声音中度过的&#xff0c;有的公司逐渐取消年终奖&#xff0c;原本熙熙攘攘的办公室&am…

【Linux磁盘管理】

Linux磁盘管理 写在前面 在此强调一个 Linux 的核心机制就是一切皆文件。 I/O Ports 即I/O 设备地址&#xff0c;用来标识硬件对应的设备地址&#xff0c;来让操作系统以及 cpu 使用。 CPU 的核数不一定就是越多越好&#xff0c;由于CPU 协调之间的协调问题&#xff0c;可能性…

MySQL#2(数据模型,SQL通用语法,SQL分类)

目录 一.数据模型 二.SQL通用语法 三.SQL的分类 1.DDL DDL---操作数据库 DDL---操作表 2.DML DML---操作数据 3.DQL(重点) 基础查询 条件查询 排序查询 分组查询 分页查询 扩展: 聚合函数 一.数据模型 数据库在内存中是以文件夹的方式存在 数据表和数据是以文件的形式存…

3年经验去面试20k测试岗,看到这样的面试题我还是心虚了....

我是着急忙慌的准备简历——3年软件测试经验&#xff0c;可独立测试大型产品项目&#xff0c;熟悉项目测试流程...薪资要求&#xff1f;3年测试经验起码能要个20K吧 我加班肝了一页半简历&#xff0c;投出去一周&#xff0c;面试电话倒是不少&#xff0c;自信满满去面试&#…

神州数码交换机CS6200命令学习(三)

1. Loopback-detection 端口环路检测 Loopback-detection interval-time xx xx 设置恢复环路检测的时间间隔 Loopback-detection specified-vlan xx 进入接口&#xff0c;启动端口环路检测功能 Loopback-detection control 进入接口&#xff0c;打开端口环路控制方式&…

sync.Map中amended和Delete删除中nil和expunged的理解

结论 amended: 意思是被修改过的&#xff0c;为true就是表明dirty和readOnly中的map的数据不相同了 readOnly中的map数据为nil: 就是正常的Delete()操作会让readOnly中的map数据值为nil&#xff0c;key还在 readOnly中的map数据被标记为expunged(擦去&#xff1b;删掉): 就是只…

【现代密码学原理】——期末复习(冲刺篇)

&#x1f4d6; 前言&#xff1a;快考试了&#xff0c;做篇期末总结&#xff0c;都是重点与必考点。 博主预测考点&#xff1a; 计算题&#xff1a;RSA、Diffie-Hellman密钥交换、EIGamal 密钥交换、使用SHA-512算法&#xff0c;计算消息的Hash值、计算消息的HMAC 应用题&#…

Java注册登录及邮箱发送账号激活(主要技术栈SpringBoot,MyBatis)

文章目录前言学习之前需要掌握的知识项目环境搭建数据库的搭建前端页面的搭建后端代码格式pojomapperControllerservice最后前言 项目流程图如下&#xff1a; 这里我们通过&#xff1a; 163邮箱来实现激活码发送qq邮箱来进行接收 学习之前需要掌握的知识 springboot的基本使…