Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.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_Code Generation_Bytecode_Decompiling_.class File - Fatal编程技术网

读取Java.class文件

读取Java.class文件,java,code-generation,bytecode,decompiling,.class-file,Java,Code Generation,Bytecode,Decompiling,.class File,我想编写一个工具,使用编译的.class文件作为输入生成一些代码。具体来说,我想从这个类文件中读取: 方法,带有注释 方法参数,带注释 输入类文件可能引用工具类路径中不存在的几种类型。这没关系,我不需要对它们做任何事情,只需要将完全限定的类型名读取为字符串。我确实需要从注释中获取一些信息,但它们将位于工具的类路径中 有没有我可以用的图书馆?如果API有点像反射API就好了,但它不一定非得像反射API。您需要看两件事,JDK附带的API可能已经完成了您想要的功能。我认为您可以使用spring类

我想编写一个工具,使用编译的
.class
文件作为输入生成一些代码。具体来说,我想从这个类文件中读取:

  • 方法,带有注释
  • 方法参数,带注释
输入类文件可能引用工具类路径中不存在的几种类型。这没关系,我不需要对它们做任何事情,只需要将完全限定的类型名读取为字符串。我确实需要从注释中获取一些信息,但它们将位于工具的类路径中


有没有我可以用的图书馆?如果API有点像反射API就好了,但它不一定非得像反射API。

您需要看两件事,JDK附带的API可能已经完成了您想要的功能。

我认为您可以使用spring类扫描

ClassPathScanningCandidateComponentProvider provider = new ClassPathScanningCandidateComponentProvider(true);
String basePackage = "org/springframework/samples/petclinic";
Set<BeanDefinition> components = provider.findCandidateComponents(basePackage);
for (BeanDefinition component : components) {
    System.out.printf("Component: %s\n", component.getBeanClassName());
}
ClassPathScanningCandidateComponentProvider=新的ClassPathScanningCandidateComponentProvider(true);
String basePackage=“org/springframework/samples/petclinic”;
Set components=provider.findCandidateComponents(basePackage);
用于(BeanDefinition组件:组件){
System.out.printf(“组件:%s\n”,Component.getBeanClassName());
}

有关更多信息,您可以查看spring

如果您有权生成.class文件,则应该能够提供帮助。

ASM允许您从文件/输入流读取类,而无需加载类。它允许您查看运行时未加载的注释。它还可用于修改类字节码/注释/方法等。

我正在使用它查找所有方法。

您是否选中了
http://java.decompiler.free.fr/?q=jdgui
?@Creative MITian:这似乎不是我需要的。我不需要反编译代码,我只需要元信息(您可以在运行时通过反射访问)。我还需要一个库来嵌入到我的工具中,但反编译器本身就是一个工具,看起来确实如此。链接页面没有显示任何注释,但我假设它们在那里。我是否可以直接使用它的库,而不运行命令行工具并解析输出?您可以使用反射API获得所有信息,但为此,您要分析的类需要位于类路径上。javap的输出不打算被程序使用。它有许多遗漏和歧义,只适合作为一个快速调试工具。@锑我的回答是这样的:你不需要自己编写这样一个工具,因为这样一个工具已经存在于JDK中,也就是javap。我不是建议您编写一个工具并解析javap的输出。我的观点是javap不满足OP的请求。反射API必须首先加载类,这与加载前试图从文件中读取相同的信息不太一样。错误:q说他想从没有将类加载到VM中的类文件中读取。它可以直接从jar中读取。类文件还是需要先提取jar?@gaurav此库支持读取可以作为资源的InputStream从类路径(或Jar文件)