要获取 Java 项目中所有类名,可以通过以下步骤实现:
-
使用反射获取项目中所有的类:
//获得所有的class文件名
public class getclassfilename {
//这是一个main方法,是程序的入口:
public static void main(String[] args) {
List<String> classNames = new ArrayList<>();
try {
// 获取当前类加载器
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
// 获取当前类加载器加载的所有资源的 URL
URL url = classLoader.getResource("");
// 如果是文件系统的路径
if (url.getProtocol().equals("file")) {
String basePath = URLDecoder.decode(url.getFile(), "UTF-8");
File baseDir = new File(basePath);
// 递归扫描文件夹中的所有文件
scanClasses(classNames, baseDir, baseDir);
}
} catch (Exception e) {
e.printStackTrace();
}
for (String className : classNames) {
System.out.println(className);
}
}
// 递归扫描文件夹中的所有文件
private static void scanClasses(List<String> classNames, File baseDir, File currentFile) {
if (currentFile.isDirectory()) {
File[] files = currentFile.listFiles();
if (files != null && files.length > 0) {
for (File file : files) {
scanClasses(classNames, baseDir, file);
}
}
} else if (currentFile.isFile() && currentFile.getName().endsWith(".class")) {
String classPath = currentFile.getAbsolutePath().substring(baseDir.getAbsolutePath().length() + 1);
String className = classPath.replace(File.separator, ".").replace(".class", "");
classNames.add(className);
}
}
}
打印所有类名:
这样就能获取到 Java 项目中所有的类名了。请注意,该方法仅适用于在类文件是以文件系统形式存储的情况下,对于 JAR 文件中的类是无法获取到的。另外,如果项目中有很多类文件,可能会需要一定的时间来扫描和获取类名。