0
点赞
收藏
分享

微信扫一扫

扫描给定包及子包内的所有类


import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;

/**
*
* <p>
* Title: PackageUtils.java
* </p>
* <p>
* E-Mail: 176291935@qq.com
* </p>
* <p>
* QQ: 176291935
* </p>
* <p>
* Http: iaiai.iteye.com
* </p>
* <p>
* Create time: 2011-8-2
* </p>
*
* @author 丸子
* @version 0.0.1
*/
public class PackageUtils {

/**
* 扫描给定包及子包内的所有类
*
* @param packageName
* 给定的包名
* @return The classes
* @throws ClassNotFoundException
* @throws IOException
*/
private static Class[] getClasses(String packageName)
throws ClassNotFoundException, IOException {
Class cla = PackageUtils.class;
String path = packageName.replace('.', '/');
Enumeration<URL> resources = cla.getClassLoader().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()]);
}

/**
* 找到制定包内的所有class文件
*
* @param directory
* 目录名称
* @param packageName
* 包名称
* @return The classes
* @throws ClassNotFoundException
*/
private 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()) {
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;
}

/**
* @throws IOException
* @throws ClassNotFoundException
*
*/
public static void main(String[] args) throws Exception {
Class[] clas = PackageUtils.getClasses("org");
for (Class cla : clas) {
System.out.println(cla.getName());
}
}

}

举报

相关推荐

0 条评论