Java调用JD-GUI反编译class文件
首先下载JD-GUI.jar文件
然后导入至eclipse工程
接下来就是直接粘代码了
package kt;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import org.jd.core.v1.ClassFileToJavaSourceDecompiler;
import org.jd.core.v1.api.loader.Loader;
import org.jd.core.v1.api.loader.LoaderException;
import org.jd.core.v1.api.printer.Printer;
public class ts
{
static class Load implements Loader
{
@Override
public boolean canLoad(String paramString) {
// TODO Auto-generated method stub
File file=new File(paramString);
if(file.exists()&&file.isFile())
return true;
return false;
}
@Override
public byte[] load(String paramString) throws LoaderException {
// TODO Auto-generated method stub
try
{
FileInputStream FI=new FileInputStream(paramString);
ByteArrayOutputStream bt=new ByteArrayOutputStream();
int len=0;
byte b[]=new byte[1024];
while((len=FI.read(b))!=-1)
{
bt.write(b,0,len);
}
FI.close();
byte []ot=bt.toByteArray();
bt.close();
b=null;
return ot;
}catch(IOException e) {}
return null;
}
}
static class pr implements Printer
{
String allinf;
boolean outtofile;
FileOutputStream FO;
public pr()
{
outtofile=false;
allinf="";
}
public pr(File file)
{
outtofile=true;
try {
FO=new FileOutputStream(file);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
allinf="";
}
@Override
public void start(int paramInt1, int paramInt2, int paramInt3) {}
@Override
public void end() {
if(outtofile)
{
try {
FO.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
@Override
public void printText(String paramString) {
if(outtofile)
{
try {
FO.write(paramString.getBytes());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
allinf+=paramString;
if(paramString.equals(";")||paramString.equals("{")||paramString.equals("}")) {
allinf+="\n";
if(outtofile)
{
try {
FO.write("\n".getBytes());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
@Override
public void printNumericConstant(String paramString) {
allinf+=paramString;
if(outtofile)
{
try {
FO.write(paramString.getBytes());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
@Override
public void printStringConstant(String paramString1, String paramString2) {
allinf+=paramString1;
if(outtofile)
{
try {
FO.write(paramString1.getBytes());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
@Override
public void printKeyword(String paramString) {
// TODO Auto-generated method stub
allinf+=paramString;
if(outtofile)
{
try {
FO.write(paramString.getBytes());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
@Override
public void printDeclaration(int paramInt, String paramString1, String paramString2, String paramString3) {
// TODO Auto-generated method stub、
//输出函数名称
allinf+=paramString2;
if(outtofile)
{
try {
FO.write(paramString2.getBytes());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
@Override
public void printReference(int paramInt, String paramString1, String paramString2, String paramString3,
String paramString4) {
if(allinf.charAt(allinf.length()-1)=='\n')
{
allinf+="\t";
if(outtofile)
{
try {
FO.write("\t".getBytes());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
allinf+=paramString2;
if(outtofile)
{
try {
FO.write(paramString2.getBytes());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
@Override
public void indent() {}
@Override
public void unindent() {}
@Override
public void startLine(int paramInt) {}
@Override
public void endLine() {}
@Override
public void extraLine(int paramInt) {}
@Override
public void startMarker(int paramInt) {}
@Override
public void endMarker(int paramInt) {}
}
public static void main(String args[])
{
ClassFileToJavaSourceDecompiler cl=new ClassFileToJavaSourceDecompiler();
try {
pr p=new pr(new File("E:\\desktop\\111.java"));
cl.decompile(new Load(),p, "E:\\desktop\\MyMain.class");
System.out.print(p.allinf);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}