-
java 获取某个包下的所有类名
2017-07-07 14:51:18java 获取某个包下的所有类名 (中文路径)本方法支持class 模式和jar 包模式
package com.yoke.util; import com.yoke.md5util.UrlDecode; import com.yoke.util.file.FileUtil; import java.io.File; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URL; import java.net.URLClassLoader; import java.util.ArrayList; import java.util.Enumeration; import java.util.List; import java.util.jar.JarEntry; import java.util.jar.JarFile; /** * @author jiangzeyin * @date 2016-9-9 */ public class PackageUtil { /** * 获取某包下(包括该包的所有子包)所有类 * * @param packageName 包名 * @return 类的完整名称 * @throws UnsupportedEncodingException */ public static List<String> getClassName(String packageName) throws IOException { return getClassName(packageName, true); } /** * 获取某包下所有类 * * @param packageName 包名 * @param childPackage 是否遍历子包 * @return 类的完整名称 * @throws UnsupportedEncodingException */ public static List<String> getClassName(String packageName, boolean childPackage) throws IOException { List<String> fileNames = new ArrayList<>(); ClassLoader loader = Thread.currentThread().getContextClassLoader(); String packagePath = packageName.replace(".", "/"); Enumeration<URL> urls = loader.getResources(packagePath); while (urls.hasMoreElements()) { URL url = urls.nextElement(); if (url == null) continue; String type = url.getProtocol(); if (type.equals("file")) { fileNames.addAll(getClassNameByFile(url.getPath(), childPackage)); } else if (type.equals("jar")) { fileNames.addAll(getClassNameByJar(url.getPath(), childPackage)); } } fileNames.addAll(getClassNameByJars(((URLClassLoader) loader).getURLs(), packagePath, childPackage)); return fileNames; } /** * 从项目文件获取某包下所有类 * * @param filePath 文件路径 * 类名集合 * @param childPackage 是否遍历子包 * @return 类的完整名称 * @throws UnsupportedEncodingException */ private static List<String> getClassNameByFile(String filePath, boolean childPackage) throws UnsupportedEncodingException { List<String> myClassName = new ArrayList<>(); filePath = UrlDecode.getURLDecode(filePath); File file = new File(filePath); File[] childFiles = file.listFiles(); if (childFiles == null) return myClassName; for (File childFile : childFiles) { if (childFile.isDirectory()) { if (childPackage) { myClassName.addAll(getClassNameByFile(childFile.getPath(), childPackage)); } } else { String childFilePath = childFile.getPath(); childFilePath = FileUtil.clearPath(childFilePath); if (childFilePath.endsWith(".class")) { childFilePath = childFilePath.substring(childFilePath.indexOf("/classes/") + 9, childFilePath.lastIndexOf(".")); childFilePath = childFilePath.replace("/", "."); myClassName.add(childFilePath); } } } return myClassName; } /** * 从jar获取某包下所有类 * * @param jarPath jar文件路径 * @param childPackage 是否遍历子包 * @return 类的完整名称 * @throws UnsupportedEncodingException */ private static List<String> getClassNameByJar(String jarPath, boolean childPackage) throws UnsupportedEncodingException { List<String> myClassName = new ArrayList<String>(); String[] jarInfo = jarPath.split("!"); String jarFilePath = jarInfo[0].substring(jarInfo[0].indexOf("/")); jarFilePath = UrlDecode.getURLDecode(jarFilePath); String packagePath = jarInfo[1].substring(1); try { JarFile jarFile = new JarFile(jarFilePath); Enumeration<JarEntry> entrys = jarFile.entries(); while (entrys.hasMoreElements()) { JarEntry jarEntry = entrys.nextElement(); String entryName = jarEntry.getName(); if (entryName.endsWith(".class")) { if (childPackage) { if (entryName.startsWith(packagePath)) { entryName = entryName.replace("/", ".").substring(0, entryName.lastIndexOf(".")); myClassName.add(entryName); } } else { int index = entryName.lastIndexOf("/"); String myPackagePath; if (index != -1) { myPackagePath = entryName.substring(0, index); } else { myPackagePath = entryName; } if (myPackagePath.equals(packagePath)) { entryName = entryName.replace("/", ".").substring(0, entryName.lastIndexOf(".")); myClassName.add(entryName); } } } } } catch (Exception e) { //SystemLog.Log(LogType.systemInfo, e.getMessage(), e); } return myClassName; } /** * 从所有jar中搜索该包,并获取该包下所有类 * * @param urls URL集合 * @param packagePath 包路径 * @param childPackage 是否遍历子包 * @return 类的完整名称 * @throws UnsupportedEncodingException */ private static List<String> getClassNameByJars(URL[] urls, String packagePath, boolean childPackage) throws UnsupportedEncodingException { List<String> myClassName = new ArrayList<String>(); if (urls != null) { for (int i = 0; i < urls.length; i++) { URL url = urls[i]; String urlPath = url.getPath(); // 不必搜索classes文件夹 if (urlPath.endsWith("classes/")) { continue; } String jarPath = urlPath + "!/" + packagePath; myClassName.addAll(getClassNameByJar(jarPath, childPackage)); } } return myClassName; } }
本方法是本人在网上看到,拿来用后面发现如果class 所在路径中存在中文则不行,本方法修护了这个问题。
关键代码是在 108行 对其路径进行url 编码
-
java 反射 获取 实例_java利用反射获取某个包下的所有获取对象属性、方法、并实例化...
2021-02-12 23:55:03java利用反射获取某个包下的所有获取对象属性、方法、并实例化发布时间:2018-11-01 15:23,浏览次数:2457, 标签:java首先贴上用到的jar包,当然也可以通过递归file.list获取类的路径名称。maven导入jar包: org....java利用反射获取某个包下的所有获取对象属性、方法、并实例化
发布时间:2018-11-01 15:23,
浏览次数:2457
, 标签:
java
首先贴上用到的jar包,当然也可以通过递归file.list获取类的路径名称。
maven导入jar包:
org.reflections
reflections0.9.11
com.google.guavaguava
21.0
一、用reflections的方式
public static List clazzLis=new ArrayList(); Reflections
reflections=new Reflections("testsunmet.imp.*"); //比如可以获取有Pay注解的class
Set> classes=reflections.getTypesAnnotatedWith(Pay.class);
for(Class> cl:classes){ Pay pay=cl.getAnnotation(Pay.class);
clazzList.add(cl.getCanonicalName())//使用list把获取到的class路径装起来 } }
二、使用递归file.list的方式
List clzList=new ArrayList<>(); private void scanPackages(String
packageName){ //获取指定包的完整路径 String
packagesUrl=this.getClass().getClassLoader().getResource("/"+packageName.replaceAll("\\.",
"/")).getFile(); File scanFile=new File(packagesUrl); String[]
filenameList=scanFile.list(); for(String filename:filenameList){ File file=new
File(scanFile,filename); if(file.isDirectory()){
scanPackages(packageName+"."+filename); }else{ if(filename.indexOf(".class")>0)
clzList.add(packageName+"."+filename.replace(".class","")); } } }
个人推荐使用reflections。
1.使用
//使用class.forName获取对象 如Class clazz=Class.forName("xxxx.class");
//clazz.newInstance()使用创建对象
//使用clazz.isAnnotationPresent(xxx.class)判断是否式某种注解上的对象 //获取注解上的值
clazz.getAnnotation(xxx.class) //设置属性值 Field[]
declaredFields=clazz2.newInstance().getClass().getDeclaredFields(); for(Field
field:declaredFields){ field.setAccessible(true);//使可以set私有属性的值
//这只是测试,如果真正使用,注意set的值对应上 field.set(clazz2.newInstance(), "test"); } //获取方法
Method[] methods=clazz.newInstance().getClass().getMethods(); //执行对象中的方法
methods.invoke(执行对象,方法参数)
-
java利用反射获取某个包下的所有获取对象属性、方法、并实例化
2018-11-01 15:23:24首先贴上用到的jar包,当然也可以通过递归file.list获取类的路径名称。 maven导入jar包: <dependency> <groupId>org.reflections</groupId> <artifactId&...首先贴上用到的jar包,当然也可以通过递归file.list获取类的路径名称。
maven导入jar包:
<dependency> <groupId>org.reflections</groupId> <artifactId>reflections</artifactId> <version>0.9.11</version> </dependency> <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>21.0</version> </dependency>
一、用reflections的方式
public static List<String> clazzLis=new ArrayList<String>(); Reflections reflections=new Reflections("testsunmet.imp.*"); //比如可以获取有Pay注解的class Set<Class<?>> classes=reflections.getTypesAnnotatedWith(Pay.class); for(Class<?> cl:classes){ Pay pay=cl.getAnnotation(Pay.class); clazzList.add(cl.getCanonicalName())//使用list把获取到的class路径装起来 } }
二、使用递归file.list的方式
List<String> clzList=new ArrayList<>(); private void scanPackages(String packageName){ //获取指定包的完整路径 String packagesUrl=this.getClass().getClassLoader().getResource("/"+packageName.replaceAll("\\.", "/")).getFile(); File scanFile=new File(packagesUrl); String[] filenameList=scanFile.list(); for(String filename:filenameList){ File file=new File(scanFile,filename); if(file.isDirectory()){ scanPackages(packageName+"."+filename); }else{ if(filename.indexOf(".class")>0) clzList.add(packageName+"."+filename.replace(".class","")); } } }
个人推荐使用reflections。
1.使用
//使用class.forName获取对象 如Class clazz=Class.forName("xxxx.class"); //clazz.newInstance()使用创建对象 //使用clazz.isAnnotationPresent(xxx.class)判断是否式某种注解上的对象 //获取注解上的值 clazz.getAnnotation(xxx.class) //设置属性值 Field[] declaredFields=clazz2.newInstance().getClass().getDeclaredFields(); for(Field field:declaredFields){ field.setAccessible(true);//使可以set私有属性的值 //这只是测试,如果真正使用,注意set的值对应上 field.set(clazz2.newInstance(), "test"); } //获取方法 Method[] methods=clazz.newInstance().getClass().getMethods(); //执行对象中的方法 methods.invoke(执行对象,方法参数)
-
java 反射获取jar包对象_java利用反射获取某个包下的所有获取对象属性、方法、并实例化...
2021-02-26 17:02:28首先贴上用到的jar包,当然也可以通过递归file.list获取类的路径名称。maven导入jar包:org.reflectionsreflections0.9.11com.google.guavaguava21.0一、用reflections的方式public static List clazzLis=new ...首先贴上用到的jar包,当然也可以通过递归file.list获取类的路径名称。
maven导入jar包:
org.reflections
reflections
0.9.11
com.google.guava
guava
21.0
一、用reflections的方式
public static List clazzLis=new ArrayList();
Reflections reflections=new Reflections("testsunmet.imp.*");
//比如可以获取有Pay注解的class
Set> classes=reflections.getTypesAnnotatedWith(Pay.class);
for(Class> cl:classes){
Pay pay=cl.getAnnotation(Pay.class);
clazzList.add(cl.getCanonicalName())//使用list把获取到的class路径装起来
}
}
二、使用递归file.list的方式
List clzList=new ArrayList<>();
private void scanPackages(String packageName){
//获取指定包的完整路径
String packagesUrl=this.getClass().getClassLoader().getResource("/"+packageName.replaceAll("\\.", "/")).getFile();
File scanFile=new File(packagesUrl);
String[] filenameList=scanFile.list();
for(String filename:filenameList){
File file=new File(scanFile,filename);
if(file.isDirectory()){
scanPackages(packageName+"."+filename);
}else{
if(filename.indexOf(".class")>0)
clzList.add(packageName+"."+filename.replace(".class",""));
}
}
}
个人推荐使用reflections。
1.使用
//使用class.forName获取对象 如Class clazz=Class.forName("xxxx.class");
//clazz.newInstance()使用创建对象
//使用clazz.isAnnotationPresent(xxx.class)判断是否式某种注解上的对象
//获取注解上的值 clazz.getAnnotation(xxx.class)
//设置属性值
Field[] declaredFields=clazz2.newInstance().getClass().getDeclaredFields();
for(Field field:declaredFields){
field.setAccessible(true);//使可以set私有属性的值
//这只是测试,如果真正使用,注意set的值对应上
field.set(clazz2.newInstance(), "test");
}
//获取方法
Method[] methods=clazz.newInstance().getClass().getMethods();
//执行对象中的方法
methods.invoke(执行对象,方法参数)
-
springboot中得注解_springboot中获取指定包下的包含某个注解的全部类
2021-01-17 09:06:20需求获取spring项目里的带有某个注解的全部类难点需要扫描指定包路径下的类,同时也要扫描其下所有子包思路可以自己实现,推荐使用spring的工具类代码package com.example.demo;import ... -
promise获取所有文件路径_node获取指定目录下所有文件的内容生成PDF
2021-03-04 08:59:42有个需求场景是需要把某个目录下的所有指定文件的内容生成pdf,因为是前端开发,所以就用node来干活首先是pdf的包是用pdfkit, 这里有两个坑,第一个是生成的文件中可能会有系统无法识别的换行和空格,会被替换成... -
获取目录下文件路径信息写入Excel并打包上传远程服务器
2020-10-09 15:04:52最近在练习go代码,恰好工作中有一些场景需要经常去访问某个目录下所有文件,将相对路径写入Excel并上传系统,同时打包文件上传服务器。利用工作之余,练练手学习写了一个小工具,主要实现功能如下: 获取指定目录... -
shell中获取某个目录下全部的子文件名,java根据包名分批打包
2016-12-07 15:20:32思路首先我们要先获得文件夹v1下所有的文件夹名。 因为打jar包格式:ggservice-文件夹名.jar的形式。 我会先对整个项目进行javac编译,之后再cd进入到v1路径中, for循环得到的文件夹名,进行打jar包。得到某目录... -
C++获取某路径下所有文件名称代码
2017-12-25 15:17:01这份代码可以在C++下获得某个路径下所有文件的名称以及路径,而且这份代码只依赖C++标准库,不需要依赖其他库。使用的时候,包含头文件,然后调用类的静态成员函数就可以了。这份代码是来源于opencv2.4.x版本,如果... -
获取指定文件夹下,所有大于指定时间的视频路径
2019-09-20 00:36:03更新 刚发现ffmpeg居然也有人开发了python的包,所以也可以直接使用ffmpeg-python ...有时候我们获取文件夹里面的所有视频的长度,或者挑选出大于某个长度的视频,这时候可以使用ffmepg,也可... -
获取指定路径下所有PDF文件的总页数
2013-08-07 14:09:00在开发过程中遇见了这样一个问题,某个文件夹下包含了很多PDF文件,现在要统计这些文件的总页数,当然可以逐个打开,然后将页数累加起来,但是相对来说很麻烦,于是写了一个winform的程序,来实现页数的统计!... -
Poco C++获取文件夹下的所有文件
2020-09-21 10:11:06Poco C++如何获取某个目录下的所有文件 记录一下自己写的,开始也在网上找了很多获取文件的代码,有一个io.h(这个比较坑,只能windows下用,Linux不行),也有替代的。但用Poco库更简单,要运行下面的代码,还需要做... -
Python 找出某个路径下 xlsx、txt、pdf 等等文件结尾
2020-11-29 14:46:58Python 找出某个路径下 xlsx、txt、pdf 等等文件结尾 ...# 获取指定目录下 所有的xlsx , txt 等文件 具体看需求 def get_file(patterns , path): all_files=[] p=Path(path) for item in patterns: file_name -
java 获取一个类的所有属性_java获取枚举类的所有属性
2021-02-28 08:03:59:通过取项目某个包路径下的所有枚举类来获取该类的所有属性直接上java代码:package com.xxx.common.ennum;import cn.hutool.core.util.ClassUtil;import java.lang.reflect.Method;import java.util.ArrayList;... -
java获取枚举类的所有属性
2020-11-19 10:48:11:通过取项目某个包路径下的所有枚举类来获取该类的所有属性 直接上java代码: package com.xxx.common.ennum; import cn.hutool.core.util.ClassUtil; import java.lang.reflect.Method; import java.util.... -
ServletContext_资源文件(资源在classes目录下的某个包中)
2019-09-17 11:13:05/*如果资源文件在某个包下面即:读取类路径下面的某个包下面的资源文件 ClassLoader loader = ServletContextDemo4.class.getClassLoader();//获取到了装载该类的类装载器(也是装载所有的类的类装载器) loader.get.... -
java之通过反射获取类中的注解值
2017-03-08 10:31:04需求:今天做项目的时候,需要获取某个包下面所有的类里面的@Resources字段的名字以及所注入的接口所对应的路径 要是这文件夹只有几个Action的话,我倒是可以考虑直接手动,可是 有整整70多个Action,如果我手动... -
Spring 源码解析之 通过类加载器获取资源集合
2021-03-06 11:16:24文章目录提取标记对象编写获取某个包下的类的集合工具类 提取标记对象 实现思路: 指定对象范围, 获取范围内的所有类 遍历所有类, 获取被注解标记的类并加载进容器里. 编写获取某个包下的类的集合工具类 获取某个包... -
Java反射获取实例的速度比较
2020-09-24 11:45:23之前代码有一个逻辑,是在初始化时读取某个包下的所有class文件,放入到一个HashMap里。代码运行过程中,通过Key获取到对应class的全路径名,最后通过Class.forName(className).getDeclaredConstructor().new... -
比java 反射_Java反射获取实例的速度对比分析
2021-02-26 11:19:37之前代码有一个逻辑,是在初始化时读取某个包下的所有class文件,放入到一个HashMap里。代码运行过程中,通过Key获取到对应class的全路径名,最后通过Class.forName(className).getDeclaredConstructor().new... -
[Python自动化办公]01输出目录下所有文件及文件夹
2020-04-07 01:09:18输出文件和文件夹2.1 获取当前Python程序运行路径2.2 自动处理路径连接2.3 列出当前程序文件夹下的所有文件和文件夹2.4 列出指定某个文件夹下的文件和文件夹2.5 判断是否为文件夹2.6 推荐os.scandir() 迭代器(将... -
雄迈OCX控件开发包
2019-02-03 19:21:26功能说明:对正在预览的所有通道进行录像,保存录像文件的路径由客户端页面配置 参数说明: lpSaveFile:保存录像的路径,(当设值为“”时:路径取配置文件路径,如果没有配置文件将用默认路径“C:\record”) ... -
Hybrid App 离线包方案实践
2021-01-02 19:51:42其中 data 中就是所有相关离线包的信息集合,包括了离线包的版本、状态、以及文件的 url 地址和 md5 值等。 当 <a href="https://github.com/mcuking/mobile-web-best-practice">mobile-web-best-practice</a>... -
adb1.0.26包含fastboot.exe
2019-03-05 15:11:03在多个设备/模拟器连接的情况下较常用的是 -s <serialNumber> 参数,serialNumber 可以通过 adb devices 命令获取。如: $ adb devices List of devices attached cf264b8f device emulator-5554 device 10.129.... -
微软Sysinternals Suite工具包 2018.12.18 官方版.zip
2019-07-09 18:07:08它能识别所有的标准串行和并行 IOCTL,甚至可以显示部分正在发送和接收的数据。3.x 版具有强大的新 UI 增强功能和高级筛选功能。ProcDump 这一新的命令行实用工具旨在捕获其他方式难以隔离和重现 CPU 峰值的进程... -
CentOS7 下 OpenLDAP Server 安装和配置及使用 phpLDAPadmin 和
2017-11-13 12:46:00LDAP 代表轻量级目录访问协议Lightweight Directory Access Protocol,并包含在一系列协议之中,这些协议允许一个客户端通过网络去获取集中存储的信息(例如所登录的 shell 的路径,家目录的绝对路径,或者其他典型... -
Visual C++范例大全 本书全部源码打包(1~17章)共406个实例
2013-08-18 10:08:00实例229——获取系统所有的驱动器以及每个驱动器的序列号 实例230——获取驱动器的文件系统类型 实例231——获取磁盘的空间信息 实例232——判别磁盘驱动器的类型 实例233——获取当前目录、系统目录和... -
#TCGA系列#利用perl提取一个文件夹中的多个文件夹里的注释文本
2019-07-12 17:58:09我们里用gdc下载TCGA数据时,下载到一个压缩文件包。解压后,会发现里面有多个文件夹,而且最烦人的是:有的文件夹里有...#获取某个文件夹目录下的文件的路径名(包括多级目录里的文件) sub gDirTree { my $d... -
python如何移动带空格的文件_如何用python循环合并文件?
2020-12-07 07:18:34筛选xlsx类型的文件3.append纵向合并如何获取文件路径导入程序包import osimport pandas as pdimport numpy as np文件“外貌”用os.walk遍历某个目录下的所有文件r=[]d=[]f=[]for root, dirs, files in os.walk("G:\...