将.class文件转换为.java文件

40

我有一些需要转换成 .java 的 .class 文件,于是我执行了以下操作:

javap -c ClassName.class

而且我一直都在遇到相同的错误

ERROR:Could not find ClassName.class

你们有什么想法,可能是什么原因呢?我查了javap的手册,就我所知道的来说,语法是正确的。如果有其他方法将其转换为.java文件,我非常愿意尝试。


2
可能是 如何反编译Java类文件? 的重复问题。 - user
尝试使用下面的在线工具。它看起来也不错:www.showmycode.com/ - Anu
5个回答

50

使用 javap 读取字节码

javap 命令需要的是类名而不是带有 .class 扩展名的文件名。请尝试:

javap -c ClassName

将 .class 文件转换为 .java 文件

javap 可以显示出 java 方法的实现,但它只能展示 JVM 字节码格式,无法还原为 java 语法。

如果你需要实际上进行反编译(即逆转 javac)你需要使用一个合适的反编译工具。可以参考以下相关问题:


7
我强烈反对使用“javap -c Classname”作为正确答案。你不能使用javap来反编译文件(将二进制代码转化为源代码)。javap只是一个反汇编器,无法为你生成Java源代码。你需要一个真正的Java反编译器,比如jad或其它类似的工具。 也许我这些年来一直没有理解javap的某些内容,但我相信所有指向它的答案都是错误的。 - carlspring
3
你读了这个问题吗?你读到了写着“我遇到了相同的错误,ERROR:Could not find ClassName.class。你们有什么想法,可能是什么原因引起的吗?”的那一部分了吗?还有,你读了我回答中关于如何反编译 .class 文件的部分吗?能否请您澄清一下,您觉得我的回答有什么不正确的地方? - aioobe

1
我猜测可能是类名错误 - 请确保使用完全解析的类名,包括所有包 - 或者它不在CLASSPATH中,因此javap找不到它。

2
javap 接受没有 .class 扩展名的参数。(如果您提供了 .class 扩展名,它将产生精确的错误消息。)(实际上,只要它能在当前目录中找到 .class 文件,它就接受非完全限定的类名。) - aioobe

0

我使用了http://www.javadecompilers.com,但在某些类中它会显示“无法加载此类...”的消息。

相反地,可以下载Android Studio,导航到包含Java类文件的文件夹并双击它。代码将显示在右侧窗格中,您可以从那里复制它并将其保存为Java文件。


0
步骤1:如果您的类文件在一个jar包中,将.jar扩展名重命名为.zip并提取zip文件夹。 步骤2:使用下面的在线反编译器上传您的.class文件并阅读内容。 http://www.javadecompilers.com/

-1

这是针对Mac用户的:

首先,您必须澄清类文件的位置...因此例如,在“Terminal”(Mac应用程序)中,您将键入:

cd

然后无论您的文件在哪里,例如:

cd /Users/CollarBlast/Desktop/JavaFiles/

然后你会按回车键。之后,你将执行命令。 例如:

cd /Users/CollarBlast/Desktop/JavaFiles/ (然后我将按回车键...)

然后我会输入命令:

javap -c JavaTestClassFile.class (然后我将再次按回车键...)

希望这样能够正常工作!


1
你所添加的唯一内容是确保他在正确的目录中。我真诚地希望那不是最初的问题。而且你没有解决实际问题:他需要在结尾处去掉“.class”。 - Teepeemm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接