正如描述所说:如何获得给定包名的所有Java类文件的列表。如何获取Java中特定包中的所有Class文件?
1
A
回答
3
我在这里看到了很多关于SO和其他站点的问题和方法,以查找特定Java包中的所有类。大多数解决方案都不适合我。有时他们使用Jar文件,但不使用文件夹中的“普通”Java项目(比如IDE的方式)或其他方式。因此,我将所有这些代码片段放在一起,形成了一个解决方案,无论代码是在Jar文件中还是在普通文件夹结构中,它都可以用于我(开箱即用)。
这非常简单:您给方法getClassesInPackage
要检查的包的名称,您将获得此包中所有类的列表。目前没有任何例外是有规律的“消费”。
玩得开心!以下是代码:
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;
}
+1
为什么口袋妖怪例外? – JacksOnF1re 2015-02-23 16:13:30
+0
引发异常的地方应根据代码的用途插入自己的代码。仅仅在一个实例化错误上退出整个探索可能并不总是足够的。可以输出一个调试消息或做其他有用的东西。 – mythbu 2015-02-25 10:01:12
相关问题
- 1. 如何在Java中获取.class的所有属性?
- 2. 有没有办法从.java文件中获取.class文件
- 3. 如何获取Java文件夹中的所有文件
- 4. Java - 如何获取文件夹中的所有文件名
- 5. 如何从java中的异常stackTrace中获取特定的包
- 6. 如何从文件中获取特定行中的特定值?
- 7. 如何从java中的.class文件获取实例
- 8. 获取gitpython中的特定文件的所有修订
- 9. 如何“触摸”包含特定头文件的所有文件?
- 10. 读取matlab中特定文件夹中的所有文件?
- 11. 如何从特定文件夹(iPhone)获取所有图像?
- 12. 获取包含特定字符串的特定文件夹中的文件
- 13. java - 如何解压zip文件的特定目录中的所有文件?
- 14. java如何从xml文件中获取所有元素名称
- 15. 获取特定包内的文件
- 16. 如何获取包含所有子目录文件的目录中的文件?
- 17. 如何获取给定目录中的所有文件名
- 18. 如何从特定目录中获取具有特定扩展名的所有文件的列表?
- 19. 从twitter获取包含特定单词的所有推文
- 20. java中的.class文件如何在几乎所有的环境中运行
- 21. 如何获取特定ListView列的所有行中的值?
- 22. 如何获取特定的DLL中的所有类,浏览OpenFileDialog
- 23. 如何从目录中获取文件特定的文件名?
- 24. SBT:如何定义包含特定路径中所有文件的includeFilter?
- 25. 如何获取特定网站中的所有页面链接?
- 26. 如何获取列表中特定类型的所有对象?
- 27. 如何从XML中的特定标记获取所有值?
- 28. 如何从xml中获取特定节点的所有值?
- 29. 如何获取特定Facebook相册中的所有照片?
- 30. 如何获取特定过程中存在的所有实体?
这不是问题。也许你应该将问题编辑为适当的问题,并将答案作为答案发布。 – Eran 2015-02-23 16:11:00
我知道。我在问答功能方面遇到了一些麻烦。我只想分享这段代码片段,因为这个社区帮助我解决了这个问题...... – mythbu 2015-02-23 16:12:53