62,614
社区成员
发帖
与我相关
我的任务
分享
String path=file.getCanonicalPath()+File.separator+"src";
这个函数在Eclipse中是正确的,可能不支持android系统;你找找android中有没有类似于"获取当前路径"之类的函数。
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class ScanPackage {
/**
*遍历包 并遍历子包
*/
public static void scan(String packageName ,List<Class<?>> list) throws Exception{
String path=getSrcPath()+packageToDir(packageName);
File dir=new File(path);
File[] files=dir.listFiles();
Class<?> cla=null;
for(File f:files){
if(f.isDirectory()){
String childName=packageName+"."+f.getName();
scan(childName, list);
}else{
cla=Class.forName(packageName+"."+f.getName().split("\\.")[0]);
list.add(cla);
}
}
}
/**
获取当前路径
*/
public static String getSrcPath() throws IOException{
File file=new File("");
String path=file.getCanonicalPath()+File.separator+"src";
return path;
}
/**
*package转换为路径格式
*/
public static String packageToDir(String packageName){
String[] array=packageName.split("\\.");
StringBuffer sb=new StringBuffer();
for(String str:array){
sb.append(File.separator).append(str);
}
return sb.toString();
}
public static void main(String[] args) throws Exception {
List<Class<?>> list=new ArrayList<Class<?>>();
scan("com.Models",list);
System.out.println(list.size());
for(Class<?> cla:list){
System.out.println(cla.getName());
}
}
}
/**
* 从一个包中找出所有的类,不包括jar包
* @param packageName
* @return
* @throws IOException
* @throws ClassNotFoundException
*/
@SuppressWarnings("rawtypes")
public static List<Class> getClasses(String packageName)
throws IOException, ClassNotFoundException {
ClassLoader classLoader = Thread.currentThread()
.getContextClassLoader();
String path = packageName.replace(".", "/");
System.out.println("Path:"+path);
Enumeration<URL> resources = classLoader.getResources(path);
List<File> dirs = new ArrayList<File>();
while (resources.hasMoreElements()) {
URL urlResource = resources.nextElement();
dirs.add(new File(urlResource.getFile()));
}
List<Class> classes = new ArrayList<Class>();
for (File directory : dirs) {
classes.addAll(findClasses(directory, packageName));
}
return classes;
}
@SuppressWarnings("rawtypes")
private static List<Class> findClasses(File directory, String packageName) throws ClassNotFoundException {
List<Class> classes=new ArrayList<Class>();
if(!directory.isDirectory()){
return classes;
}
File[] files=directory.listFiles();
for(File file:files){
if(file.isDirectory()){
assert !file.getName().contains(".");
System.out.println(packageName+"."+file.getName());
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;
}