JAvaパッケージの下のすべてのクラスを遍歴する方法
1973 ワード
現在のプロジェクトの下にあるパッケージの下にあるすべてのクラスを巡回します.
構想
1.パッケージの下のすべてのクラスを巡回し、実際には、まずパッケージに対応するファイルパスを見つけてから、ファイルパスに基づいて対応するフォルダを見つけてから、フォルダを巡回する.クラスはすべて*.class*が終わるので、パッケージフォルダの下にあるすべてを見つけます.classファイルでいいです.部分*$*.classは内部クラスまたは匿名クラスであり、遍歴時にフィルタ4を行うことができる.ファイルタイプがjarパッケージであることを考慮してjarパッケージとして配置される場合があります.
コード実装
構想
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);
}
}
}