¿Cómo incluir todas las clases en el paquete jar?
Si ha leído el código fuente de algunos frameworks, sabrá que en la mayoría de los casos primero encuentran la ubicación del archivo correspondiente al paquete y luego iteran a través de los archivos debajo para leer Nombre del archivo. , el nombre del archivo corresponde al nombre de la clase.
/*?
*@(#)PackageUtil.java1.002006-11-27?
*?
*Copyright(c)2005ShenzhenSurfilterNetworkTechnologyCo. p> p>
*/? packageorg.rut.core;? importjava.io.File;? importjava.io.FileInputStream;? importjava.io.IOException;? ;? importjava.util.jar.JarEntry;? importjava.util.jar.JarInputStream;? /**
*@since2006-11-27?
*@autorwushugen?
*?
*Historial modificado:
*?
*/? publicclassPackageUtil{? >* @paramargs?
*@throwsIOException
*/? publicstaticvoidmain(String[]args)throwsIOException{? Stringgt; ? para (Cadenas: cls) {? System.out.println(s);? }? publicstaticListlt; stringgt ();? .reemplazar ('.' ,'/') "/";? intentar{? for(FileclassPath: CLASS_PATH_ARRAY){?
if(!classPath.exists())continuar;
if(classPath.isDirectory()){? Filedir=newFile(classPath, rPath);? if(!dir.exists())continuar;? for(Filefile:dir.listFiles()){? isFile( )){? StringclsName=file.getName();? clsName=pkgName "." clsName.substring(0, clsName.length()-6);? else{? FileInputStreamfis=newFileInputStream(classPath);? JarInputStreamjis=newJarInputStream(fis, false);?
yo();? if(eName.startsWith(rPath)&!eName.endsWith("/")){? ret.add(eName.replace('/','.')) .substring(0, eName .length()-6));? }? jis.closeEntry();? }? jis.close();? }? }? }? privatestaticString[]CLASS_PATH_PROP={"java.class.path", "java.ext.dirs",? "sun.boot.class.path"};? privatestaticListlt; Filegt; getClassPath(){? Listlt; ret=newArrayListlt;? Stringdelim=":"; si (System.getProperty("os.name").indexOf("Windows")! 1)? delim=";"? para (Stringpro: CLASS_PATH_PROP) {? String[]pathes=System.getProperty(pro).split(delim);? para (Stringpath: rutas)? );? }? regresar;? }?