通过项目下的包名获取包下的全部类

通过项目下的包名获取包下的全部类

public class GetClasses {

    public static Set<Class<?>> classes = new HashSet<>();

    public static void main(String[] args) {
        GetAllClass("com.bihang.seayatest.nio");
        System.out.println(classes.size());
    }

    public static void GetAllClass(String packageName){
        Enumeration<URL> dirs = null;
        try {
            dirs = Thread.currentThread().getContextClassLoader().getResources(packageName.replace(".","/"));
        } catch (IOException e) {
            e.printStackTrace();
        }
        while (dirs.hasMoreElements()){
            //获取物理路径
            String filePath = dirs.nextElement().getFile();
            addPathToClasses(filePath,packageName,classes);
        }
    }

    public static void addPathToClasses(String classPath, String rootPackageName, Set<Class<?>> classes) {
        File file = new File(classPath);
        if (!file.exists() && !file.isDirectory())
            return;

        if (file.isDirectory()) {
            File[] list = file.listFiles();
            //如果是文件夹就需要在包名后面添加文件名
            for (File path :
                    list) {
                if (path.isDirectory())
                    addPathToClasses(path.getAbsolutePath(), rootPackageName+"."+path.getName(), classes);
                else
                    addPathToClasses(path.getAbsolutePath(), rootPackageName, classes);
            }
        } else {
            if (file.getName().endsWith(".class")){
                String className = file.getName().substring(0,
                        file.getName().length() - 6);
                try {
                    classes.add(Thread.currentThread().getContextClassLoader().loadClass(rootPackageName + ‘.‘+ className));
                } catch (ClassNotFoundException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

getName()方法

返回文件名称,包括后缀.

list()方法

返回文件名的数组,是String的数组。

listFiles()方法

返回文件的数组,也就是绝对路径的数组。

accept()方法

listFiles()方法会为此目录对象下的每一个文件名调用accpet()方法,来判断该文件是否包含在内,判断结果由accept()方法返回的布尔值表示。

exists()

创建之前,要通过file.exists()判断该文件或者文件夹是否已经存在,如果返回true,是不能创建的。

原文地址:https://www.cnblogs.com/bihanghang/p/10208268.html

时间: 2024-10-02 22:17:32

通过项目下的包名获取包下的全部类的相关文章

Spring根据包名获取包路径下的所有类

参考mybatis MapperScannerConfigurer.java 最终找到 Spring的一个类  ClassPathBeanDefinitionScanner.java 参考ClassPathBeanDefinitionScanner 和它的父类 ClassPathScanningCandidateComponentProvider,将一些代码进行抽取,得到如下工具类. import org.apache.commons.lang3.ArrayUtils; import org.s

java中通过包名获取该包下的所有class

前面做的在mybatis通过注解自动创建更新表结构的项目,其中在spring加载完毕之后需要去获取所有实体类的class,用来获取实体类属性上的注解,进而分析表结构达到创建修改表结构的目的. 所以就需要一个功能,通过包名获取该包下的所有class,那么直接贴代码: package com.sunchenbin.store.utils; import java.io.File; import java.io.FileFilter; import java.io.IOException; impor

多渠道打包,生成不同包名的包

来对多渠道打包,并生成不同的包名的知识点做个总结.需要生成不同包名的原因是为了运营的ASO. 方法: 1.直接建立渠道的文件夹,修改Manifest里面的包名 2.利用占位符 当然上面两种方法各有优劣,最后说一下他们的各自的一些特点. 首先来说第一种方法,步骤: 1.根据需要生成多少个包名的包建立和main同级的文件夹. 例如:我这里需要两个不同包名的包,那就需要建立两个不同渠道的文件夹. 2.在文件夹里面新建Maifest文件 因为包名是在Manifest文件里面定义的,所以需要建立Manif

通过扫描包路径获取包内class

public static Set<Class<?>> getClasses(ClassLoader classLoader, String pack) { Set<Class<?>> classes = new LinkedHashSet<Class<?>>(); boolean recursive = true; String packageName = pack; // 包路径分隔符 . 换为 / String packageD

更具后缀名获取目录下的文件名

更具后缀名获取目录下的文件名的方法: 方法1: 1 import java.util.List; 2 import java.io.File; 3 import java.util.ArrayList; 4 5 /** 6 * 自定义"文件过滤器" --筛选出指定命名条件的文件 7 * @author fereli 8 * 9 */ 10 public class FiletTest6 { 11 public static File[] getFiles(File f,String s

java解析xml文件练习——通过应用包名获取应用图标即其他信息(基于魅族应用商店)

1.解析包名数据文件(txt文件),并生成包名数组: package jsouphtml; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; public class GetPackageName { public static String[] getPackageName(String filename){ String pack

java获取src下文件路径和获取webRoot下文件路径

获取src下的fileurl.properties文件路径 this.getClass().getResource("/fileurl.properties").getPath() 获取webRoot下的service文件夹路径 request.getSession().getServletContext().getRealPath("/service");

关于maven环境下使用pom.xml引入包名.lastUpdate包的解决办法

今天在导入POI-OOXML的时候老师缺失xmlbeans包,而且刷新pom文件总是生成一个lastupdate文件,大小为1KB,终于找到解决办法. 1.首先删除想要的jar包所在文件夹内的所有 .lastUpdate的文件,并下载需要的jar包放入相应的文件夹内. 2.在eclipse中依次打开window->showview->other,找到maven 3.选择Maven库点击ok,在console一栏找到maven库的界面 4.在本地仓库右键,重新绑定索引,这样就能在pom.xml中

【Android】获取手机中已安装apk文件信息(PackageInfo、ResolveInfo)(应用图片、应用名、包名等)

众所周知,通过PackageManager可以获取手机端已安装的apk文件的信息,具体代码如下 [java] view plaincopyprint? PackageManager packageManager = this.getPackageManager(); List<PackageInfo> packageInfoList = packageManager.getInstalledPackages(0); 通过以上方法,可以得到手机中安装的所有应用程序,既包括了手动安装的apk包的信