gpt4 book ai didi

java - Java中如何获取特定包中的所有Class文件?

转载 作者:行者123 更新时间:2023-12-02 10:58:34 26 4
gpt4 key购买 nike

正如描述所说:如何获取给定包名称的所有 Java 类文件的列表。

最佳答案

我在 SO 和其他网站上看到了很多问题和方法来查找特定 Java 包中的所有类。大多数解决方案对我来说都不起作用。有时,他们处理 Jar 文件,但不处理文件夹中的“普通”Java 项目(就像 IDE 的方式),或者反之亦然。因此,我将所有这些代码片段放在一起,形成了一个解决方案,无论代码是在 Jar 文件中还是在普通文件夹结构中,该解决方案(对我来说)都可以开箱即用。

这非常简单:您为方法 getClassesInPackage 提供要检查的包的名称,您将获得该包中所有类的列表。目前无一异常(exception)都在有序“消费”。

玩得开心!代码如下:

public static final List<Class<?>> getClassesInPackage(String packageName) {
String path = packageName.replaceAll("\\.", File.separator);
List<Class<?>> classes = new ArrayList<>();
String[] classPathEntries = System.getProperty("java.class.path").split(
System.getProperty("path.separator")
);

String name;
for (String classpathEntry : classPathEntries) {
if (classpathEntry.endsWith(".jar")) {
File jar = new File(classpathEntry);
try {
JarInputStream is = new JarInputStream(new FileInputStream(jar));
JarEntry entry;
while((entry = is.getNextJarEntry()) != null) {
name = entry.getName();
if (name.endsWith(".class")) {
if (name.contains(path) && name.endsWith(".class")) {
String classPath = name.substring(0, entry.getName().length() - 6);
classPath = classPath.replaceAll("[\\|/]", ".");
classes.add(Class.forName(classPath));
}
}
}
} catch (Exception ex) {
// Silence is gold
}
} else {
try {
File base = new File(classpathEntry + File.separatorChar + path);
for (File file : base.listFiles()) {
name = file.getName();
if (name.endsWith(".class")) {
name = name.substring(0, name.length() - 6);
classes.add(Class.forName(packageName + "." + name));
}
}
} catch (Exception ex) {
// Silence is gold
}
}
}

return classes;
}

关于java - Java中如何获取特定包中的所有Class文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28678026/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com