读书人

扫描给定包及子包内的全部类

发布时间: 2012-06-29 15:48:47 作者: rapoo

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

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());}}}

读书人网 >软件架构设计

热点推荐