根据包名packageName获取到路径
- 利用类加载器获取到包名所在的路径
public static ClassLoader getClassLoader(){
return Thread.currentThread().getContextClassLoader();
}
// 注意使用类加载器,需要把文件名换成"/"分隔符
URL url =classLoader.getResource(packageName.replace('.','/'));
关于classLoader.getResource(packageName.replace(’.’,’/’)); 方法的原理见此链接:
方法原理链接
- 提取协议,我们所需的是File协议头
// 我们需要提取url的protocol
String protocol=url.getProtocol();
Set<Class<?>> clazzSet=null;
// equalsIgnoreCase()用来忽略大小写
if(protocol.equalsIgnoreCase(FILE_PROTOCOL)){
clazzSet=new HashSet<Class<?>>();
File packageDirectory=new File(url.getPath());
extractClass(clazzSet,packageDirectory,packageName);
}
- 递归获取class文件
private static void extractClass(Set<Class<?>> emptyClassSet, File fileSource, String packageName){
if(!fileSource.isDirectory()){
return ;
}
File[] files=fileSource.listFiles(new FileFilter() {