如何在Java的特定程序包中获取所有Class文件?

神话

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

神话

我在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;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在所有快照程序包中搜索文件名?

来自分类Dev

如何从R中的特定程序包中分离所有对象和方法?

来自分类Dev

如何从R中的特定程序包中分离所有对象和方法?

来自分类Dev

我们如何在Android中获取特定程序包名称的哈希键?

来自分类Dev

如何使用MSBuild为该项目文件夹中的所有文件创建MSdeploy程序包

来自分类Dev

Java获取包中的所有文件

来自分类Dev

如何删除特定程序包的所有构建依赖项?

来自分类Dev

如何删除特定程序包的所有构建依赖项?

来自分类Dev

如何在Visual Studio中制作具有多个可执行文件的安装程序包

来自分类Dev

Azure发布程序包不包括所有文件

来自分类Dev

如何通过PIP看到依赖于某个程序包的所有程序包?

来自分类Dev

如何使用PIP看到依赖于某个程序包的所有程序包?

来自分类Dev

Android Studio中的“程序包筛选器删除了所有程序包”错误

来自分类Dev

Android Studio中的“程序包筛选器删除了所有程序包”错误

来自分类Dev

如何从PPA重置所有程序包?

来自分类Dev

如何从PPA重置所有程序包?

来自分类Dev

如何在更新之前突出显示特定的程序包

来自分类Dev

如何在命令提示符下从不同的程序包运行Java文件?

来自分类Dev

如何在apt中查找依赖于某个程序包的程序包?

来自分类Dev

如何在运行时从程序包中以编程方式配置karaf / etc文件?

来自分类Dev

如何从终端中查找特定类的Java的程序包名称

来自分类Dev

Java:Android排除最终编译文件中具有依赖性的程序包

来自分类Dev

如何在具有许多物化视图的oracle中创建程序包

来自分类Dev

如何在R的corrplot程序包中的有效值周围画线

来自分类Dev

不同程序包中的Java文件无法编译

来自分类Dev

在单个程序包中混合Java和Clojure文件

来自分类Dev

如何使.so文件显示在程序包中?

来自分类Dev

如何在导入的程序包中引用函数?

来自分类Dev

如何在dnf中启用程序包缓存?

Related 相关文章

  1. 1

    如何在所有快照程序包中搜索文件名?

  2. 2

    如何从R中的特定程序包中分离所有对象和方法?

  3. 3

    如何从R中的特定程序包中分离所有对象和方法?

  4. 4

    我们如何在Android中获取特定程序包名称的哈希键?

  5. 5

    如何使用MSBuild为该项目文件夹中的所有文件创建MSdeploy程序包

  6. 6

    Java获取包中的所有文件

  7. 7

    如何删除特定程序包的所有构建依赖项?

  8. 8

    如何删除特定程序包的所有构建依赖项?

  9. 9

    如何在Visual Studio中制作具有多个可执行文件的安装程序包

  10. 10

    Azure发布程序包不包括所有文件

  11. 11

    如何通过PIP看到依赖于某个程序包的所有程序包?

  12. 12

    如何使用PIP看到依赖于某个程序包的所有程序包?

  13. 13

    Android Studio中的“程序包筛选器删除了所有程序包”错误

  14. 14

    Android Studio中的“程序包筛选器删除了所有程序包”错误

  15. 15

    如何从PPA重置所有程序包?

  16. 16

    如何从PPA重置所有程序包?

  17. 17

    如何在更新之前突出显示特定的程序包

  18. 18

    如何在命令提示符下从不同的程序包运行Java文件?

  19. 19

    如何在apt中查找依赖于某个程序包的程序包?

  20. 20

    如何在运行时从程序包中以编程方式配置karaf / etc文件?

  21. 21

    如何从终端中查找特定类的Java的程序包名称

  22. 22

    Java:Android排除最终编译文件中具有依赖性的程序包

  23. 23

    如何在具有许多物化视图的oracle中创建程序包

  24. 24

    如何在R的corrplot程序包中的有效值周围画线

  25. 25

    不同程序包中的Java文件无法编译

  26. 26

    在单个程序包中混合Java和Clojure文件

  27. 27

    如何使.so文件显示在程序包中?

  28. 28

    如何在导入的程序包中引用函数?

  29. 29

    如何在dnf中启用程序包缓存?

热门标签

归档