我目前正在从事一个项目,该项目要求我以编程方式将 .class 文件反编译为 java 文件。 IE。我有一个程序应该读取一个类文件并反编译它,并将生成的 java 源代码写入一个文件。请帮助我完成它。
编辑:
我对反编译器的世界完全陌生。我已经使用了一些 API,但我不知 Prop 体如何使用以及使用哪一个。任何形式的帮助都会非常感激
编辑:
我尝试使用:
import com.strobel.decompiler.*;
import java.io.*;
public class JavaDecode {
public static void main(String[] args)throws Exception {
decompileee();
}
private static void decompileee()throws Exception
{
final DecompilerSettings settings = DecompilerSettings.javaDefaults();
final FileOutputStream stream = new FileOutputStream("C:/jp/decompiled.java");
final OutputStreamWriter writer = new OutputStreamWriter(stream);
Decompiler.decompile("C:/jp/X.class",
new PlainTextOutput(writer),
settings
);
System.out.println("Success");
}
}
但上面的代码只是在 scpecified 目录中创建了一个名为“decompiled.java”的文件。但是该文件是一个空文件。
最佳答案
Procyon包括一个 Java 反编译器框架。它是用 Java 编写的,可以称为库。目前还没有太多文档,但我是作者,如果您遇到麻烦,我可以帮助您——只需在 BitBucket 上与我联系。
如何反编译java.lang.String
的简单例子:
final DecompilerSettings settings = DecompilerSettings.javaDefaults();
try (final FileOutputStream stream = new FileOutputStream("path/to/file");
final OutputStreamWriter writer = new OutputStreamWriter(stream)) {
Decompiler.decompile(
"java.lang.String",
new PlainTextOutput(writer),
settings
);
}
catch (final IOException e) {
// handle error
}
您还可以将 .class
文件路径而不是类名传递给 decompile()
方法。
如果您不使用 Java 7,请确保手动刷新/关闭您的 I/O 资源,例如:
try {
final FileOutputStream stream = new FileOutputStream("path/to/file");
try {
final OutputStreamWriter writer = new OutputStreamWriter(stream);
try {
Decompiler.decompile(
"java.lang.String",
new PlainTextOutput(writer),
DecompilerSettings.javaDefaults()
);
}
finally {
writer.close();
}
}
finally {
stream.close();
}
}
catch (final IOException e) {
// handle error
}
关于java - 以编程方式反编译 .class 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23217891/