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);
    }

  • 相关阅读:
    ubuntu开启SSH服务
    Ubuntu修改虚拟内存(即swap空间)
    【转】Ubuntu 13.10中MyEclipse 10.6+下载+安装+破解
    【转】 ubuntu下安装mysql
    【转】 Ubuntu 11.04 下安装配置 JDK 7
    Linux非root用户安装jdk和tomcat
    algorithm之改变序列算法--待解决
    时间日期设置--ctime头文件
    C中的一些函数
    algorithm之不变序列操作
  • 原文地址:https://www.cnblogs.com/ll409546297/p/9341255.html
Copyright © 2011-2022 走看看