如果妳看過壹些框架的源碼,就知道大多數情形時他們都是先找到某個包的對應的文件位置,並遍歷其下面的文件,讀取其文件名,對應的就是類名。?
/*?*@(#)PackageUtil.java1.002006-11-27?
*?
*Copyright(c)2005ShenzhenSurfilterNetworkTechnologyCo.,Ltd.Allrightsreserved.?
*/?
packageorg.rut.core;? importjava.io.File;? importjava.io.FileInputStream;? importjava.io.IOException;? importjava.util.ArrayList;? importjava.util.List;? importjava.util.jar.JarEntry;? importjava.util.jar.JarInputStream;? /***@since2006-11-27?
*@authorwushugen?
*?
*ModifiedHistory:
*?
*/?
publicclassPackageUtil{? /**?*@paramargs?
*@throwsIOException
*/?
publicstaticvoidmain(String[]args)throwsIOException{? List<String>cls=getClassInPackage("java.util");? for(Strings:cls){? System.out.println(s);? }? }? publicstaticList<String>getClassInPackage(StringpkgName){? List<String>ret=newArrayList<String>();? StringrPath=pkgName.replace('.','/')+"/";? try{? for(FileclassPath:CLASS_PATH_ARRAY){?if(!classPath.exists())continue;
if(classPath.isDirectory()){?
Filedir=newFile(classPath,rPath);? if(!dir.exists())continue;? for(Filefile:dir.listFiles()){? if(file.isFile()){? StringclsName=file.getName();? clsName=pkgName+"."+clsName.substring(0,clsName.length()-6);? ret.add(clsName);? }? }? }else{? FileInputStreamfis=newFileInputStream(classPath);? JarInputStreamjis=newJarInputStream(fis,false);? JarEntrye=null;? while((e=jis.getNextJarEntry())!=null){? StringeName=e.getName();? if(eName.startsWith(rPath)&&!eName.endsWith("/")){? ret.add(eName.replace('/','.').substring(0,eName.length()-6));? }? jis.closeEntry();? }? jis.close();? }? }? }catch(Exceptione){? thrownewRuntimeException(e);? }? returnret;? }? privatestaticString[]CLASS_PATH_PROP={"java.class.path","java.ext.dirs",? "sun.boot.class.path"};? privatestaticList<File>CLASS_PATH_ARRAY=getClassPath();? privatestaticList<File>getClassPath(){? List<File>ret=newArrayList<File>();? Stringdelim=":";? if(System.getProperty("os.name").indexOf("Windows")!=-1)? delim=";";? for(Stringpro:CLASS_PATH_PROP){? String[]pathes=System.getProperty(pro).split(delim);? for(Stringpath:pathes)? ret.add(newFile(path));? }? returnret;? }? }