现在的位置: 首页Java技术 > 正文
Java遍历获取包路径中的所有类
关键词:Java ┊ 来源: 原创收藏

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.jar.JarEntry;
import java.util.jar.JarInputStream;
public class PackageUtil {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
List<String> cls = getClassInPackage("java.util ");
for (String s : cls) {
System.out.println(s);
}

}

public   static   List <String>   getClassInPackage(String   pkgName)   { 
                List <String>   ret   =   new   ArrayList <String> (); 
                String   rPath   =   pkgName.replace( '. ',   '/ ')   +   "/ "; 
                try   { 
                        for   (File   classPath   :   CLASS_PATH_ARRAY)   { 
                              if(!classPath.exists())   continue;   
                              if   (classPath.isDirectory())   { 
                                        File   dir   =   new   File(classPath,   rPath); 
                                        if(!dir.exists())   continue; 
                                        for   (File   file   :   dir.listFiles())   { 
                                                if   (file.isFile())   { 
                                                        String   clsName   =   file.getName(); 
                                                        clsName   =   pkgName+ ". "   +clsName.substring(0,   clsName.length()   -   6); 
                                                        ret.add(clsName); 
                                                } 
                                        } 
                                }   else   { 
                                        FileInputStream   fis   =   new   FileInputStream(classPath); 
                                        JarInputStream   jis   =   new   JarInputStream(fis,   false);
                                        JarEntry   e   =   null; 
                                        while   ((e   =   jis.getNextJarEntry())   !=   null)   { 
                                                String   eName   =   e.getName(); 
                                                if   (eName.startsWith(rPath)   &&   !eName.endsWith( "/ "))   { 
                                                        ret.add(eName.replace( '/ ',   '. ').substring(0,eName.length()-6)); 
                                                } 
                                                jis.closeEntry(); 
                                        } 
                                        jis.close(); 
                                } 
                        } 
                }   catch   (Exception   e)   { 
                        throw   new   RuntimeException(e); 
                } 

                return   ret; 
        } private static String[] CLASS_PATH_PROP = { "java.class.path ", "java.ext.dirs ", "sun.boot.class.path " };

private static List<File> CLASS_PATH_ARRAY = getClassPath();

private static List<File> getClassPath() {
List<File> ret = new ArrayList<File>();
String delim = ": ";
if (System.getProperty("os.name ").indexOf("Windows ") != -1)
delim = "; ";
for (String pro : CLASS_PATH_PROP) {
String[] pathes = System.getProperty(pro).split(delim);
for (String path : pathes)
ret.add(new File(path));
}
return ret;
}
}
本文由 jack 发布于 2795天 1小时 27分钟前,目前已有 10278 人浏览
欢迎大家转载分享,请注明来源及链接;商业媒体转载请获得授权,谢谢合作!
 
匿名网友: 1楼1128天 9小时 0分钟前
很好,但不够完善

添加评论