package org.b3mn.poem.util;
import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
import java.net.URL;
import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.Set;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
public class PackageUtil {
/**
* 从包package中获取所有的Class
*
* @param pack
* @return
* @throws
*/
public static Set<Class<?>> getClasses(String pack) {
// 第一个class类的集合
Set<Class<?>> classes = new LinkedHashSet<Class<?>>();
// 是否循环迭代
boolean recursive = true;
// 获取包的名字 并进行替换
String packageName = pack;
String packageDirName = packageName.replace('.', '/');
// 定义一个枚举的集合 并进行循环来处理这个目录下的things
Enumeration<URL> dirs;
try {
dirs = Thread.currentThread().getContextClassLoader().getResources(packageDirName);
// 循环迭代下去
while (dirs.hasMoreElements()) {
// 获取下一个元素
URL url = dirs.nextElement();
// 得到协议的名称
String protocol = url.getProtocol();
// 如果是以文件的形式保存在服务器上
if ("file".equals(protocol)) {
//System.err.println("file类型的扫描");
// 获取包的物理路径
String filePath = URLDecoder.decode(url
Java从包中读取所有的class文件
最新推荐文章于 2024-03-29 15:08:05 发布
该博客介绍了一个Java工具类`PackageUtil`,用于从指定的包名中动态获取所有的Class文件。它通过扫描文件系统和JAR文件,将所有匹配的类添加到集合中。该方法适用于加载自定义视图类或其他需要按包加载的场景。
摘要由CSDN通过智能技术生成