Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 仅给定.class文件的完整路径,如何加载其类对象?_Java_Reflection_Urlclassloader - Fatal编程技术网

Java 仅给定.class文件的完整路径,如何加载其类对象?

Java 仅给定.class文件的完整路径,如何加载其类对象?,java,reflection,urlclassloader,Java,Reflection,Urlclassloader,我正在开发一个应用程序,需要能够对Java代码进行一些分析;有的通过文本,有的通过反思。用户应该能够输入一个目录,程序将从中提取所有.java和.class文件。我对.java文件没有问题,但是当我尝试获取.class文件的类时,它不起作用 我已经研究了如何使用带有URL的类加载器。到目前为止我所能找到的给了我这个 URL url = this.openFile().toURI().toURL(); URL[] urls = new URL[]{url}; ClassLoader cl = ne

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

我已经研究了如何使用带有URL的类加载器。到目前为止我所能找到的给了我这个

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对象加载到我的程序中,并开始对其进行反射?

您有两种选择:

  • 首先使用字节码库读取文件,这样您就可以找出实际的类名

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

  • 实现自己的
    ClassLoader
    子类,并调用

  • 建议使用选项2。

    您有两个选项:

  • 首先使用字节码库读取文件,这样您就可以找出实际的类名

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

  • 实现自己的
    ClassLoader
    子类,并调用

  • 建议使用选项2