【问题标题】:Given only the full path to a .class file, how can I load its Class object?仅给定 .class 文件的完整路径,如何加载其 Class 对象?
【发布时间】:2019-04-25 18:19:52
【问题描述】:

我正在开发一个需要能够对 Java 代码进行一些分析的应用程序;有的通过文字,有的通过反思。用户应该能够输入一个目录,程序将从其中提取所有 .java 和 .class 文件。我对 .java 文件没有任何问题,但是当我尝试获取 .class 文件的类时,它不起作用。

我已经研究过使用带有 URL 的 ClassLoader。到目前为止我能找到的东西给了我这个

URL url = this.openFile().toURI().toURL();
URL[] urls = new URL[]{url};
ClassLoader cl = new URLClassLoader(urls);
Class cls = cl.loadClass(this.path);
return cls;

path 只是一个字符串,其中包含相关 .class 文件的实际路径,例如Users/me/Documents/Application/out/production/MyPackage/MyClass.class。根据我自己阅读的理解,这种方法与我了解输入的包结构有关,但总的来说我不知道​​。我所拥有的只是 .class 文件的绝对路径。有没有办法,只使用这条路径(或它的一些简单转换),我可以将实际的 MyClass 类对象加载到我的程序中并开始对其进行反射?

【问题讨论】:

    标签: java reflection urlclassloader


    【解决方案1】:

    你有两个选择:

    1. 使用字节码库先读取文件,这样就可以找出实际的类名是什么。

      例如在您的示例中,它可能是 MyPackage.MyClass,但您无法从完全限定的文件名中知道这一点。

    2. 实现您自己的ClassLoader 子类,并调用defineClass(byte[] b, int off, int len)

    推荐使用选项 2。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多