精华内容
下载资源
问答
  • java 获取某个包下的所有类名

    万次阅读 2017-07-07 14:51:18
    java 获取某个包下的所有类名 (中文路径

    本方法支持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利用反射获取某个包下所有获取对象属性、方法、并实例化发布时间: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(执行对象,方法参数)

    展开全文
  • 首先贴上用到的jar,当然也可以通过递归file.list获取的路径名称。 maven导入jar: &lt;dependency&gt; &lt;groupId&gt;org.reflections&lt;/groupId&gt; &lt;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(执行对象,方法参数)
    

     

    展开全文
  • 首先贴上用到的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(执行对象,方法参数)

    展开全文
  • 需求获取spring项目里带有某个注解全部类难点需要扫描指定包路径类,同时也要扫描其下所有思路可以自己实现,推荐使用spring工具类代码package com.example.demo;import ...
  • 有个需求场景是需要把某个目录下的所有指定文件内容生成pdf,因为是前端开发,所以就用node来干活首先是pdf的包是用pdfkit, 这里有两个坑,第一个是生成文件中可能会有系统无法识别换行和空格,会被替换成...
  • 最近在练习go代码,恰好工作中有一些场景需要经常去访问某个目录下所有文件,将相对路径写入Excel并上传系统,同时打包文件上传服务器。利用工作之余,练练手学习写了一个小工具,主要实现功能如下: 获取指定目录...
  • 思路首先我们要先获得文件夹v1下所有的文件夹名。 因为打jar格式:ggservice-文件夹名.jar的形式。 我会先对整个项目进行javac编译,之后再cd进入到v1路径中, for循环得到的文件夹名,进行打jar。得到某目录...
  • 这份代码可以在C++下获得某个路径下所有文件名称以及路径,而且这份代码只依赖C++标准库,不需要依赖其他库。使用时候,包含头文件,然后调用类静态成员函数就可以了。这份代码是来源于opencv2.4.x版本,如果...
  • 更新 刚发现ffmpeg居然也有人开发了python的包,所以也可以直接使用ffmpeg-python ...有时候我们获取文件夹里面的所有视频长度,或者挑选出大于某个长度视频,这时候可以使用ffmepg,也可...
  • 在开发过程中遇见了这样一个问题,某个文件夹包含了很多PDF文件,现在要统计这些文件总页数,当然可以逐个打开,然后将页数累加起来,但是相对来说很麻烦,于是写了一个winform程序,来实现页数统计!...
  • Poco C++如何获取某个目录下的所有文件 记录一下自己写,开始也在网上找了很多获取文件代码,有一个io.h(这个比较坑,只能windows用,Linux不行),也有替代。但用Poco库更简单,要运行下面代码,还需要做...
  • Python 找出某个路径下 xlsx、txt、pdf 等等文件结尾 ...# 获取指定目录 所有的xlsx , txt 等文件 具体看需求 def get_file(patterns , path): all_files=[] p=Path(path) for item in patterns: file_name
  • :通过取项目某个包路径下的所有枚举类来获取该类的所有属性直接上java代码:package com.xxx.common.ennum;import cn.hutool.core.util.ClassUtil;import java.lang.reflect.Method;import java.util.ArrayList;...
  • :通过取项目某个包路径下的所有枚举类来获取该类的所有属性 直接上java代码: package com.xxx.common.ennum; import cn.hutool.core.util.ClassUtil; import java.lang.reflect.Method; import java.util....
  • /*如果资源文件在某个包下面即:读取类路径下面的某个包下面的资源文件 ClassLoader loader = ServletContextDemo4.class.getClassLoader();//获取到了装载该类的类装载器(也是装载所有的类的类装载器) loader.get....
  • 需求:今天做项目的时候,需要获取某个包下面所有的类里面的@Resources字段的名字以及所注入的接口所对应的路径 要是这文件夹只有几个Action的话,我倒是可以考虑直接手动,可是 有整整70多个Action,如果我手动...
  • 文章目录提取标记对象编写获取某个包下的集合工具类 提取标记对象 实现思路: 指定对象范围, 获取范围内的所有类 遍历所有类, 获取被注解标记类并加载进容器里. 编写获取某个包下的集合工具类 获取某个包...
  • 之前代码有一个逻辑,是在初始化时读取某个包下的所有class文件,放入到一个HashMap里。代码运行过程中,通过Key获取到对应class路径名,最后通过Class.forName(className).getDeclaredConstructor().new...
  • 之前代码有一个逻辑,是在初始化时读取某个包下的所有class文件,放入到一个HashMap里。代码运行过程中,通过Key获取到对应class路径名,最后通过Class.forName(className).getDeclaredConstructor().new...
  • 输出文件和文件夹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”) ...
  • 其中 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....
  • 它能识别所有的标准串行和并行 IOCTL,甚至可以显示部分正在发送和接收的数据。3.x 版具有强大的新 UI 增强功能和高级筛选功能。ProcDump 这一新的命令行实用工具旨在捕获其他方式难以隔离和重现 CPU 峰值的进程...
  • LDAP 代表轻量级目录访问协议Lightweight Directory Access Protocol,并包含在一系列协议之中,这些协议允许一个客户端通过网络去获取集中存储的信息(例如所登录的 shell 的路径,家目录的绝对路径,或者其他典型...
  • 实例229——获取系统所有的驱动器以及每个驱动器的序列号 实例230——获取驱动器的文件系统类型 实例231——获取磁盘的空间信息 实例232——判别磁盘驱动器的类型 实例233——获取当前目录、系统目录和...
  • 我们里用gdc下载TCGA数据时,下载到一个压缩文件。解压后,会发现里面有多个文件夹,而且最烦人的是:有的文件夹里有...#获取某个文件夹目录的文件的路径名(包括多级目录里的文件) sub gDirTree { my $d...
  • 筛选xlsx类型文件3.append纵向合并如何获取文件路径导入程序import osimport pandas as pdimport numpy as np文件“外貌”用os.walk遍历某个目录下的所有文件r=[]d=[]f=[]for root, dirs, files in os.walk("G:\...

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 134
精华内容 53
关键字:

获取某个包下所有的路径