當前位置:編程學習大全網 - 源碼下載 - 如何獲取壹個jar包裏面的所有的類信息

如何獲取壹個jar包裏面的所有的類信息

如果妳看過壹些框架的源碼,就知道大多數情形時他們都是先找到某個包的對應的文件位置,並遍歷其下面的文件,讀取其文件名,對應的就是類名。?

/*?

*@(#)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;?

}?

}

  • 上一篇:2019沈陽告白祖國燈光秀地點時間沈陽國慶燈光秀總結
  • 下一篇:Acos源代碼編譯
  • copyright 2024編程學習大全網