java 遍历包下所有类的方法

遍历当前项目下某个包下所有类

思路

1.遍历包下所有的类,实际就是先找到包对应的文件路径,然后根据文件路径找到对应文件夹,然后对文件夹进行遍历
2. 类都是以*.class* 结尾,故只要找到包文件夹下所有.class文件即可
3. 部分*$*.class为内部类或者匿名类,遍历的时候可进行过滤
4. 有时候以jar包形式部署,考虑文件类型为jar包,思路类似

代码实现

        // 包名
        String packageName = "com.el.canno.utils";
        // 包相对路径
        String packagePath = packageName.replace(".","/");
        // 资源URL
        URL url = ClassLoader.getSystemResource("");
        // 问价协议一般为 file or jar
        if("file".equals(url.getProtocol())) {
            File[] files = new File(url.getPath() + packagePath)
                    .listFiles(file -> file.getName().endsWith(".class") || file.isDirectory());
            for(File file : files){
                // 文件夹,可递归遍历,此处省略
                if(file.isDirectory()){
                    continue;
                }
                // 输出类名称
                System.out.println(file.getName().replace(".class",""));
            }
        }else if("jar".equals(url.getProtocol())){
            // 获取jar包
            JarFile jarFile =((JarURLConnection) url.openConnection()).getJarFile();
            // 拿到jar包下所有文件
            Enumeration<JarEntry> entries = jarFile.entries();
            // 根据包名过滤文件
            while (entries.hasMoreElements()){
                JarEntry entry = entries.nextElement();
                if(entry.getName().startsWith(packagePath) || entry.getName().endsWith(".class")){
                    String name = entry.getName().replace(packagePath,"").replace(".class","");
                    // 包下文件夹,此处不遍历
                    if(name.contains("/")){
                        continue;
                    }
                    System.out.println(name);
                }
            }
        }
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值