java - 将包+类名转换为 .class 文件名

标签 java class classpath bytecode bcel

我正在编写一个分析 .class 文件的程序。我想将包和类名称附加到我的输出中。

我的计划是编写一个函数,它将包和类名作为输入并找到相应的 .class 文件(这样用户就不必输入该文件,并且可以'不要弄错),其中“find”应理解为“给我一些数据,我可以将其用作 BCEL 的 ClassParser 构造函数的参数”(可以是文件名,也可以是 zip 文件的名称和zip 文件中的名称)。

我该怎么做? java有没有自带的东西可以做到这一点?我知道名称解析是在 CLASSPATH 上下文中完成的,因此用户可能也应该提供其中之一;没关系。

注意:解决方案不应执行.class 文件中的任何代码。只是字节,女士;-)

最佳答案

好吧,如果您使用 BCEL,一切都已经存在,请参阅 ClassPath :

import java.io.IOException;
import org.apache.bcel.classfile.ClassParser;
import org.apache.bcel.classfile.JavaClass;
import org.apache.bcel.util.ClassPath;

public class BcelTest {
    public static void main(String[] args) throws IOException {
        String classPath=System.getProperty("java.class.path");
        // demonstrating with our own class path examplary for an arbitrary path String
        ClassPath cp=new ClassPath(classPath);
        ClassPath.ClassFile cf=cp.getClassFile(BcelTest.class.getName());
        ClassParser p=new ClassParser(cf.getInputStream(), cf.getPath());
        JavaClass jc = p.parse();
        System.out.println(jc);

        // or just using our own system path explicitly
        cf=ClassPath.SYSTEM_CLASS_PATH.getClassFile("java.lang.Object");
        p=new ClassParser(cf.getInputStream(), cf.getPath());
        jc = p.parse();
        System.out.println(jc);
    }
}

关于java - 将包+类名转换为 .class 文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38033576/

相关文章:

java - 如何使用 Java 运行时打印 Python 脚本的 std 输出?

class - 在 MS Access 中引用可重复使用的表单(2 深)

c++ - 如果我们可以实例化类的对象并访问类的成员,为什么我们需要一个指向类的指针?

java - Mac OS X 上的 Tomcat 6.0

java - 似乎无法运行 jar 文件

java - 如何编写垃圾邮件过滤器

java - 在 Java EE Web 应用程序中使用 JPL (Java + Prolog)

java - 无法读取通过 .a 实现 JNI 的 .so 和 Ubuntu x64、Netbeans IDE 上的主应用程序

android - 公共(public)类必须在其自己的文件中定义

java - 使用瘦驱动程序的 jdbc 连接