zoukankan      html  css  js  c++  java
  • java之扫描包里面的class文件

      一、class作为,编译过后的产物,在很多时候,我们需要通过反射去执行class的具体方法。但是扫描class就是一个很大的问题了。

      二、所以我这里写了一个简单的class文件扫描方式。

      三、主要是利用ClassLoader中能够通过包铭去需要目录的绝对路径特性,写的

      四、例子:

    /**
         * 提供直接调用的方法
         * @param packageName
         * @return
         * @throws IOException
         * @throws ClassNotFoundException
         */
        public static  List<Class> findClass(String packageName) throws IOException, ClassNotFoundException {
            return findClass(packageName, new ArrayList<>());
        }
    
        /**
         *
         * @param packageName
         * @param clazzs
         * @return
         * @throws ClassNotFoundException
         * @throws IOException
         */
        private static List<Class> findClass(String packageName, List<Class> clazzs) throws ClassNotFoundException, IOException {
            //将报名替换成目录
            String fileName = packageName.replaceAll("\.", "/");
            //通过classloader来获取文件列表
            File file = new File(Thread.currentThread().getContextClassLoader().getResource(fileName).getFile());
            File[] files = file.listFiles();
            for (File f:files) {
                //如果是目录,这进一个寻找
                if (f.isDirectory()) {
                    //截取路径最后的文件夹名
                    String currentPathName = f.getAbsolutePath().substring(f.getAbsolutePath().lastIndexOf(File.separator)+1);
                    //进一步寻找
                    findClass(packageName+"."+currentPathName, clazzs);
                } else {
                    //如果是class文件
                    if (f.getName().endsWith(".class")) {
                        //反射出实例
                        Class clazz = Thread.currentThread().getContextClassLoader().loadClass(packageName+"."+f.getName().replace(".class",""));
                        clazzs.add(clazz);
                    }
                }
            }
            return clazzs;
    }

      五、测试:

    public static void main(String[] args) throws IOException, ClassNotFoundException {
            List<Class> clazzs = findClass("com.pinnet");
            System.out.println(clazzs);
    }

  • 相关阅读:
    接口-DAO模式代码阅读及应用
    3.1-有理数类的设计

    树、二叉树、查找算法总结
    编辑器、编译器、文件、IDE等常见概念辨析
    二叉排序树
    markdown的一些语法
    数据结构小结(线性表)
    springMVC model传对象数组 jq 获取
    java.sql.SQLException: Data truncated for column 'lastSeason' at row 1
  • 原文地址:https://www.cnblogs.com/ll409546297/p/9341255.html
Copyright © 2011-2022 走看看