Java遍历包中所有类

2014-11-24 10:09:06 · 作者: · 浏览: 0
由于项目需要,我想获得某包下所有的类(包括该包的所有子包),从网上找了找,没有什么能用的,即使找到了写的也不怎样,效率低下。索性就自己写吧,正好也锻炼锻炼写代码的功底。特此分享出来,希望能帮到大家......
[java]
package com.itkt.mtravel.hotel.util;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

public class PackageUtil {

public static void main(String[] args) {
String packageName = "com.itkt.mtravel.hotel";

List classNames = getClassName(packageName);
for (String className : classNames) {
System.out.println(className);
}
}

public static List getClassName(String packageName) {
String filePath = ClassLoader.getSystemResource("").getPath() + packageName.replace(".", "\\");
List fileNames = getClassName(filePath, null);
return fileNames;
}

private static List getClassName(String filePath, List className) {
List myClassName = new ArrayList();
File file = new File(filePath);
File[] childFiles = file.listFiles();
for (File childFile : childFiles) {
if (childFile.isDirectory()) {
myClassName.addAll(getClassName(childFile.getPath(), myClassName));
} else {
String childFilePath = childFile.getPath();
childFilePath = childFilePath.substring(childFilePath.indexOf("\\classes") + 9, childFilePath.lastIndexOf("."));
childFilePath = childFilePath.replace("\\", ".");
myClassName.add(childFilePath);
}
}

return myClassName;
}
}
没什么特别复杂的,看看基本上就能懂的。给入任意包的命名空间,就能返回该包下的所有类。自我感觉还不错,简单易用,通用和扩展性也不错。其实写代码,在有熟练的基本功之后,剩下的就是组装的思路了。