JAvaパッケージの下のすべてのクラスを遍歴する方法

1973 ワード

現在のプロジェクトの下にあるパッケージの下にあるすべてのクラスを巡回します.
構想
1.パッケージの下のすべてのクラスを巡回し、実際には、まずパッケージに対応するファイルパスを見つけてから、ファイルパスに基づいて対応するフォルダを見つけてから、フォルダを巡回する.クラスはすべて*.class*が終わるので、パッケージフォルダの下にあるすべてを見つけます.classファイルでいいです.部分*$*.classは内部クラスまたは匿名クラスであり、遍歴時にフィルタ4を行うことができる.ファイルタイプがjarパッケージであることを考慮してjarパッケージとして配置される場合があります.
コード実装
        //   
        String packageName = "com.el.canno.utils";
        //      
        String packagePath = packageName.replace(".","/");
        //   URL
        URL url = ClassLoader.getSystemResource("");
        //         file or jar
        if("file".equals(url.getProtocol())) {
            File[] files = new File(url.getPath() + packagePath)
                    .listFiles(file -> file.getName().endsWith(".class") || file.isDirectory());
            for(File file : files){
                //    ,     ,    
                if(file.isDirectory()){
                    continue;
                }
                //      
                System.out.println(file.getName().replace(".class",""));
            }
        }else if("jar".equals(url.getProtocol())){
            //   jar 
            JarFile jarFile =((JarURLConnection) url.openConnection()).getJarFile();
            //   jar      
            Enumeration entries = jarFile.entries();
            //         
            while (entries.hasMoreElements()){
                JarEntry entry = entries.nextElement();
                if(entry.getName().startsWith(packagePath) || entry.getName().endsWith(".class")){
                    String name = entry.getName().replace(packagePath,"").replace(".class","");
                    //      ,     
                    if(name.contains("/")){
                        continue;
                    }
                    System.out.println(name);
                }
            }
        }