本帖最后由 Mylo 于 2018-9-10 19:16 编辑
根据指定的包名,然后获取包下面所有的类:
思路,去到指定的包下面查找所有的文件,再将class文件找到,转化class文件的路径
public class Test{ static String path = "test";
public static void main(String[] args) throws IOException {
//如果是包含 . 需要将.改为/ 因为 这里指的是文件路径
if(path.contains(".")){
path = path.replace(".","/");
}
//获取路径下面所有的包
Enumeration<URL> resources = TestFactory.class.getClassLoader().getResources(path);
//遍历 所有的路径
while (resources.hasMoreElements()){
//获取包的真实路径
String fileRealPath = resources.nextElement().getPath();
File file = new File(fileRealPath);
if(file.isDirectory()){
getFilesByPath(file);
}
}
}
public static void getFilesByPath(File f){
File[] files = f.listFiles();
for (File file : files) {
if(file.isFile()){
//例如 是这个样子 E:\idea_workplace\workSet\myspring\target\classes\test\mylo\aop\Log.class
//获取到了全路径之后 的事情就比较好办了,我们就截取先前路径后面的字符串就OK
//例如 test\mylo\aop\Log.class
// 把 \ 换点 . 去掉 .class 就是类全名了
if(file.getName().endsWith(".class")){
String fullPath = file.getAbsolutePath();
//先前我们把path里面的 . 转换为了/ 这个时候需要转为了 \
if(path.contains("/")){
path = path.replace("/","\\");
}
int indexOfPath = fullPath.indexOf(path);
//test\mylo\aop\Log.class
String classPath = fullPath.substring(indexOfPath);
int lastIndexOfPoint = classPath.lastIndexOf(".");
String finalName = classPath.substring(0, lastIndexOfPoint);
//test\mylo\aop\Log
// System.out.println(finalName);
//将\转化为
finalName = finalName.replaceAll("\\\\",".");
System.out.println(finalName);
}
}else if(file.isDirectory()){
getFilesByPath(file);
}
}
}
}
|
|
|