扫描给定的包及其子包下面的所有类

来源:互联网 发布:淘宝怎么看店铺等级 编辑:程序博客网 时间:2024/06/03 13:15
// 调用getClasses(pkg);/** * 从上下文类加载器中扫描给定的包及其子包下面的所有类 * * @param packageName 包名 * @return  * @throws ClassNotFoundException * @throws IOException */public static Class<?>[] getClasses(String packageName) throws ClassNotFoundException, IOException {ClassLoader classLoader = Thread.currentThread().getContextClassLoader();assert classLoader != null;String path = packageName.replace('.', '/');Enumeration<URL> resources = classLoader.getResources(path);List<File> dirs = new ArrayList<File>();while (resources.hasMoreElements()) {URL resource = resources.nextElement();dirs.add(new File(resource.getFile()));}ArrayList<Class<?>> classes = new ArrayList<Class<?>>();for (File directory : dirs) {classes.addAll(findClasses(directory, packageName));}return classes.toArray(new Class[classes.size()]);}/** * 用递归的方法查找给定的目录及其子目录中的所有的类 * * @param directory 给定的目录 * @param packageName 包名 * @return 包名 + 类名 * @throws ClassNotFoundException */public static List<Class<?>> findClasses(File directory, String packageName) throws ClassNotFoundException {List<Class<?>> classes = new ArrayList<Class<?>>();if (!directory.exists()) {return classes;}File[] files = directory.listFiles();for (File file : files) {if (file.isDirectory()) {assert !file.getName().contains(".");classes.addAll(findClasses(file, packageName + "." + file.getName()));} else if (file.getName().endsWith(".class")) {classes.add(Class.forName(packageName + '.' + file.getName().substring(0, file.getName().length() - 6)));}}return classes;}


如果目录找不到,请检查你的tomcat安装目录是否存在空格哦

 ————程序员的文件夹尽量不要出现空格或者中文字符


0 0
原创粉丝点击