package com.ketayao.fensy.util; import java.io.File; import java.io.UnsupportedEncodingException; import java.net.URL; import java.net.URLDecoder; import java.util.Collection; import java.util.HashSet; /** * @author <a href="mailto:ketayao@gmail.com">ketayao</a> * @since 2014年2月27日 下午4:37:41 */ public abstract class ClassUtils { /** * 扫描给定包的所有类 * * @param packageName * 包名 * @param recursive * 是否递归子包 * @return */ public static Collection<String> getClassNames(String packageName, boolean recursive) { String packagePath = packageName.replace('.', File.separatorChar); URL url = ClassUtils.class.getClassLoader().getResource(packagePath); String path = null; try { path = URLDecoder.decode(url.getPath(), "utf-8");// 处理空格等特殊字符 } catch (UnsupportedEncodingException e) { } Collection<File> files = FileUtils.listFiles(new File(path), new String[] { "class" }, recursive); Collection<String> classNames = new HashSet<String>(); for (File file : files) { String name = StringUtils.substringAfterLast(file.getPath(), packagePath); classNames.add(packageName + StringUtils .substringBeforeLast(name.replace(File.separatorChar, '.'), ".class")); } return classNames; } }