java 反编译 行号对齐 decompiler如何去掉行号
来源:互联网 发布:amd表面格式优化 编辑:程序博客网 时间:2024/04/30 11:44
有没有感觉你用java反编译工具jd-gui.exe后,得到源码是行号对不上的,如下面,这样的源码在debug起来很不方便,根本对不上,没有调试的价值
/* */ import org.dom4j.io.SAXReader;/* */ /* */ public class ForHttpXMLAction extends HostAccessAction/* */ {/* 75 */ private String sendHeadFormatName = null;/* */ /* 80 */ private String sendFormatName = "httpSendFormat";/* */ /* 85 */ private String receiveFormatName = "httpReceiveFormat";/* */ /* 90 */ private String receiveHeadFormatName = null;/* */ /* 95 */ private int timeOut = 0;/* */ /* 100 */ private String serviceName = null;/* */ /* 105 */ private String urlEncoding = "ISO8859-1";/* */ /* 110 */ private String encoding = "GBK";/* */ /* 115 */ private String inputFeild = null;/* */ /* 120 */ private String outputFeild = null;/* */ /* 125 */ private String chanlTradNo = null;/* */
但是幸好的是,上面的行号的注释,比如这样“/* 115* /”
为了方便用eclipse的调试debug,我写了一个程序,来格式式行号,使上面的行号按照注释的对齐,这样调试起来特别方便
你只需要把jd-gui.exe反编译生成的源码目录传到main方法即可,下面代码就会生成一个与源代码平级同名+bak的文件,话不多说,直接看代码
import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;import java.io.Reader;import java.io.Writer;import java.util.ArrayList;import java.util.Collections;import java.util.Hashtable;import java.util.List;import java.util.Map;import java.util.Map.Entry;import java.util.Set;import org.apache.commons.lang.StringUtils;import org.apache.logging.log4j.core.helpers.FileUtils;public class FormatSrc {public static void main(String[] args) throws Exception {doFo("H:/work/src/7sdfasdf");}private static String common = null;public static void doFo(String path) {List<File> javaFile = getJavaFile(path);for (File file : javaFile) {doCreateFile(file, path);}}public static void doCreateFile(File file, String distDir) {String absolutePath = file.getAbsolutePath();Map<Integer, String> map = doFill(format(absolutePath));List<Integer> keyList = new ArrayList<Integer>(map.keySet());Collections.sort(keyList);// (file.getPath());// file.deleteOnExit();String p1 = absolutePath.substring(0, distDir.substring(0, distDir.lastIndexOf("/")).length());String p2 = absolutePath.substring(distDir.length() , absolutePath.length());if (common == null) {common = distDir.subSequence(distDir.lastIndexOf("/"), distDir.length()) + "-bak";}String path = p1 + "/" + common + "/" + p2;File distFile = new File(path);try {org.apache.commons.io.FileUtils.forceDeleteOnExit(distFile.getParentFile());if (!distFile.exists()) {distFile.getParentFile().mkdirs();}} catch (Exception e1) {// TODO Auto-generated catch blocke1.printStackTrace();} finally {}Writer out = null;BufferedWriter bw = null;try {out = new FileWriter(distFile);bw = new BufferedWriter(out);for (Integer key : keyList) {bw.write(key + map.get(key));bw.newLine();bw.flush();}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} finally {if (bw != null) {try {bw.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} finally {try {out.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}}public static Integer getLastKey(Set<Integer> keySet) {if (keySet == null || keySet.size() == 0) {return 0;}List<Integer> list = new ArrayList<Integer>(keySet);Collections.sort(list);Collections.reverse(list);return list.get(0);}public static List<File> getJavaFile(String dir) {List<File> javaFiles = new ArrayList<File>();File file = new File(dir);if (file.exists()) {File[] list = file.listFiles();if (list != null && list.length > 0) {for (File f : list) {if (f.isFile() && f.getName().lastIndexOf(".java") != -1) {javaFiles.add(f);} else {List<File> javaFile = getJavaFile(f.getAbsolutePath());if (javaFile != null) {javaFiles.addAll(javaFile);}}}}}return javaFiles;}public static Map<Integer, String> doFill(Map<Integer, String> map) {Map<Integer, String> _map = new Hashtable<Integer, String>();Set<Integer> keySet = map.keySet();int up;int distance;for (Integer i : keySet) {if (i > 1) {up = getLastKey(_map.keySet());if (i - up > 1) {for (int j = up + 1; j <= i - 1; j++) {_map.put(j, "#");}} else {_map.put(i, map.get(i));}} else {_map.put(i, map.get(i));}}return _map;}public static Map<Integer, String> format(String path) {Map<Integer, String> map = new Hashtable<Integer, String>();File file = new File(path);Reader in = null;BufferedReader br = null;String oneLine = null;String lineNum = null;String _lineNum = null;String lineCode = null;boolean b = false;boolean a = false;try {in = new FileReader(file);br = new BufferedReader(in);// /* 19 */ private static Map cacheMap = new HashMap();int i = 1;while ((oneLine = br.readLine()) != null && oneLine != "") {if (StringUtils.isNotBlank(oneLine)) {if (oneLine.lastIndexOf("*/") == -1) {map.put(i, oneLine);i++;b = true;if (oneLine.indexOf("Location:") != -1) {break;}} else {if (oneLine.indexOf("Location:") != -1) {break;}_lineNum = oneLine.split("\\*/")[0];lineNum = _lineNum.substring(2, _lineNum.length() - 1);lineCode = oneLine.substring(_lineNum.length() + 2, oneLine.length());lineCode = lineCode == "" ? "#" : lineCode;if (StringUtils.isBlank(lineNum)) {Integer lastKey = getLastKey(map.keySet());lastKey = lastKey == null ? 0 : lastKey;map.put(lastKey + 1, lineCode);} else {map.put(Integer.valueOf(StringUtils.trim(lineNum)), lineCode);}}// (oneLine + " " + lineNum + " " + lineCode);} else {// ("---->" + oneLine + "<--------" +// lineNum);if (oneLine.indexOf("Location:") != -1) {b = true;a = true;}if (b && a) {break;} else {map.put(i, oneLine);i++;}}}if (oneLine == "" && a) {map.put(i, oneLine);i++;}// i = 1;} catch (Exception e) {System.out.println("----->" + oneLine + "<--------");e.printStackTrace();} finally {if (br != null) {try {br.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} finally {if (in != null) {try {in.close();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}}return map;}}
0 0
- java 反编译 行号对齐 decompiler如何去掉行号
- 反编译jd_gui 去掉行号
- 编译+反编译+去掉jd-gui行号
- sublime 去掉java文件行号
- Java实现去掉每行的行号
- eclipse如何安装java decompiler反编译插件
- vim 去掉行号
- Latex 去掉行号
- 复制csdn的blog代码,如何去掉前面的行号
- Qt QTableWidget 去掉默认行号
- 去掉源代码前面的行号
- Java反编译工具Java Decompiler
- Java反编译工具(Java Decompiler)
- 【Java】反编译工具Java Decompiler
- vim如何显示行号
- SQLSERVER如何获取行号
- vs2008如何显示行号?
- vs2010如何显示行号?
- How to embed Oracle hints in Hibernate query
- abap ALV多级汇总
- qtp,VBScript操作MySQL数据库时,关于多次访问数据库的问题,数据集如何处理
- iOS开发系列--触摸事件、手势识别、摇晃事件、耳机线控
- 剑指Offer系列---(24)栈的压入、弹出序列
- java 反编译 行号对齐 decompiler如何去掉行号
- html5 canvas 自定义画图裁剪图片
- 目前在国内见过最全的 IntelliJ Idea 快捷键
- unity3d从streamingassets拷贝到persistentassets
- 副本集指南(目录)
- Eclipse快捷键
- Java - 泛型详解
- eclipse+Jboss配置远程调试
- Xcode模拟器simulators8,7,6,5下载地址及安装