gpt4 book ai didi

java - 如何获取类路径上的包和/或类的列表?

转载 作者:行者123 更新时间:2023-12-02 04:24:01 24 4
gpt4 key购买 nike

在 Java 中,我可以使用 ClassLoader 来获取已加载的类的列表以及这些类的包。但是如何获取可以加载的类的列表,即位于类路径上的类的列表?与包相同。

这是针对编译器的;在解析 foo.bar.Baz 时,我想知道 foo 是否是一个包,以将其与其他任何东西区分开来。

最佳答案

这有点棘手,有一些库可以提供帮助,但基本上......

  1. 查看您的类路径
  2. 如果您正在处理目录,则可以查找所有以 .class 结尾的文件
  3. 如果您正在处理 jar,请加载该 jar 并查找所有以 .class 结尾的文件
  4. 删除文件末尾的 .class,将“\”替换为“.”然后你就有了完全限定的类名。

如果你的类路径中有 spring,你可以利用它们已经完成了大部分工作:

ArrayList<String> retval = new ArrayList<Class<?>>();
PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
MetadataReaderFactory readerFactory = new CachingMetadataReaderFactory(resolver);
String basePath = ClassUtils.convertClassNameToResourcePath("com.mypackage.to.search");
Resource[] resources;
try {
resources = resolver.getResources("classpath*:" + basePath + "/**/*.class");
} catch (IOException e) {
throw new AssertionError(e);
}
for (Resource resource : resources) {
MetadataReader reader;
try {
reader = readerFactory.getMetadataReader(resource);
} catch (IOException e) {
throw new AssertionError(e);
}
String className = reader.getClassMetadata().getClassName();
retval.add(className)
}
return retval;

关于java - 如何获取类路径上的包和/或类的列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1308961/

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