您现在的位置是:首页 > 文章详情

java之扫描包里面的class文件

日期:2018-07-19点击:530

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

 

原文链接:https://yq.aliyun.com/articles/624241
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章