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

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
C# 判断用户是否对路径拥有访问权限
如何获取当前系统用户对文件/文件夹的操作权限? 1.获取安全信息DirectorySecurity DirectorySecurity fileAcl = Directory.GetAccessControl(folder); 通过Directory.GetAccessControl获取文件夹的权限/安全信息 详细介绍,可参考MSDN官方文档 对文件/文件夹权限的详细操作,可参考一篇博客C#文件夹权限操作 2. 获取文件夹访问权限列表FileSystemAccessRule var rules = fileAcl.GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount)).OfType<FileSystemAccessRule>().ToList(); GetAccessRules()方法返回的是AuthorizationRule集合,此处只需要获取文件权限。 FileSystemAccessRule继承自AuthorizationRule,并新增俩个属性 AccessControlType...
- 下一篇
从jedis源码中学习java socket client端的基本用法
Jedis 在很多教材或者教程上,通常都是很简单的一个例子来演示如何使用Java进行TCP通讯.在这款广泛被使用的开源组件中,我们能够更好的学习到一个企业级的组件在TCP连接的处理上,更应该关注哪些方面.有哪些是我们应该掌握或者了解的TCP知识.TCP协议本身相当复杂,我们做应用的可以先从应用层需要用到的相关知识开始了解.jedis中,与redis服务端建立连接的代码在Connection这个类中. public void connect() { if (!isConnected()) { try { socket = new Socket(); // ->@wjw_add socket.setReuseAddress(true); socket.setKeepAlive(true); // Will monitor the TCP connection is // valid socket.setTcpNoDelay(true); // Socket buffer Whetherclosed, to // ensure timely delivery of data socke...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- Windows10,CentOS7,CentOS8安装Nodejs环境
- MySQL8.0.19开启GTID主从同步CentOS8
- Red5直播服务器,属于Java语言的直播服务器
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装