使用反编译的代码作为jar包源码进行调试时,经常会遇到的情况是反编译后的源码之在注释里包含行号,但是与代码所在行经常对应不上。这个时候,就有必要对代码进行对齐了。

 public class Reorg {
public static void main(String[] args) throws IOException {
File file = new File("D:\\OpenSource\\lib\\framework\\frameworkTest");
doReorg(file);
} public static void doReorg(File file) throws IOException {
System.out.println("搜索路径:" + file.getPath());
if (file.isDirectory()) {
File[] javaFiles = file.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
if (name.endsWith(".java"))
return true;
return false;
}
}); for (File javaFile : javaFiles) {
ReorgJavaFile.reorgFile(javaFile);
} File[] paths = file.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
if (pathname.isDirectory())
return true;
return false;
}
}); for (File path : paths) {
doReorg(path);
}
}
} }
 public class ReorgJavaFile {
private static final Pattern p = Pattern.compile("/\\*\\s*(\\d+)\\s*\\*/"); public static void reorgFile(File f) throws IOException {
System.out.println("检查文件:" + f.getPath()); int a = 0;
BufferedReader r = new BufferedReader(new FileReader(f));
StringBuilder sb = new StringBuilder(); String line;
while ((line = r.readLine()) != null) { a++;
Matcher m = p.matcher(line);
if (m.find()) {
int num = Integer.valueOf(m.group(1));
if (num < a) {
System.out.print("\t");
System.out.println(f.getPath());
System.out.print("\t");
System.out.println("In line " + a + ", src file line is " + num);
} else if (num > a) {
while (num != a) {
sb.append("\n");
a++;
}
}
} sb.append(line).append("\n"); } r.close(); BufferedWriter w = new BufferedWriter(new FileWriter(f));
w.write(sb.toString()); w.flush();
w.close();
} }

不过此代码只能对反编译代码进行部分对齐,仍有一些地方需要人工进行对齐。

Java反编译代码对齐的更多相关文章

  1. Java反编译代码分析(一)

    浅析如何读懂这种反编译过来的文件,不喜勿喷. 赋值 Node node; Node node1 = _$3.getChildNodes().item(0); node1; node1; JVM INS ...

  2. [Java基础]代码块及java反编译

    块的作用域:   块(即复合语句)是指一对花括号括起来的若干条简单的java语句.块确定了变量的作用域.一个块可以嵌套在另一个块中.但是,在嵌套的两个块中声明同名的变量时应注意,块中变量申明在块外变量 ...

  3. eclipse安装JAVA反编译插件

    前言:在实际的开发中几乎都会使用到一些框架来辅助项目的开发工作,对于一些框架的代码我们总怀有一些好奇之心,想一探究竟,有源码当然更好了,对于有些JAR包中的代码我们就需要利用反编译工具来看一下了,下面 ...

  4. 【转】Eclipse Class Decompiler——Java反编译插件

    闲暇之余,写了一个Eclipse下的Java反编译插件:Eclipse Class Decompiler,整合了目前最好的2个Java反编译工具Jad和JD-Core,并且和Eclipse Class ...

  5. eclipse JAVA反编译

    前言:在实际的开发中几乎都会使用到一些框架来辅助项目的开发工作,对于一些框架的代码我们总怀有一些好奇之心,想一探究竟,有源码当然更好了,对于有些JAR包中的代码我们就需要利用反编译工具来看一下了,下面 ...

  6. Eclipse Class Decompiler——Java反编译插件(转)

    Eclipse Class Decompiler是一款Eclipse插件,整合了多种反编译器,和Eclipse Class Viewer无缝集成,能够很方便的使用插件查看类库源码,进行Debug调试. ...

  7. Eclipse4.4 安装java反编译插件Eclipse Class Decompiler

    一.在线安装方式: Eclipse Class Decompiler整合了眼下最好的2个Java反编译工具Jad和JD-Core,而且和Eclipse Class Viewer无缝集成.可以非常方便的 ...

  8. Eclipse Class Decompiler——Java反编译插件

    http://www.blogjava.net/cnfree/archive/2012/10/30/390457.html Eclipse Class Decompiler是一款Eclipse插件,整 ...

  9. 【Eclipse】eclipse安装JAVA反编译插件

    前言:在实际的开发中几乎都会使用到一些框架来辅助项目的开发工作,对于一些框架的代码我们总怀有一些好奇之心,想一探究竟,有源码当然更好了,对于有些JAR包中的代码我们就需要利用反编译工具来看一下了,下面 ...

随机推荐

  1. CentOS7中安装MySQL(简便)及 网站的搭建

    一.首先,我们需要配置CentOS7中网络环境的搭建,物理机IP为192.168.100.39,虚拟机IP为192.168.100.139,网络模式设置为桥接模式 ,再进入系统挂载光盘.输入命令   ...

  2. item2快捷键

    整理使用 iTerm 2 过程中得常用快捷键,Mac 原来自带的终端工具 Terminal 不好用是出了名的,虽然最近几个版本苹果稍微做了些优化,功能上,可用性方面增强不少,无奈有个更好用的 Iter ...

  3. ios Carthage

    使用CocoaPods来管理第三方框架很多人都知道,相对来说Carthage比较陌生,Carthage也是来管理第三方框架的,既然已经有了Cocoapods为什么还要有Carthage呢?使用Cart ...

  4. sql server报:名称 不是有效的标识符

    可能出现的几种情况: 1.执行sql提示 名称***不是有效的标识符 --添加括号 sql exec(sql) 注意exec的时候要到括号 exec  (@sql) 2.sql中的单引号嵌套采用两个单 ...

  5. iOS 申请加急审核

    申请加急网址:https://developer.apple.com/appstore/contact/appreviewteam/index.html 提交加急审核需要理由,一般涉及到银行信息,或者 ...

  6. iOS JSON、NSDictionary互转

    #import "myCode.h" @implementation myCode /*! * @brief 把格式化的JSON格式的字符串转换成字典 * @param jsonS ...

  7. hdu 1241 Oil Deposits

    #include<cstdio> #include<iostream> #include<algorithm> #include<math.h> #in ...

  8. windows C++实现注销、重启、关机 logoff reboot shutdown

    实现这一功能很简单,主要需要调用一个系统API ExitWindowsEx 功能就是,注销当前用户,关闭系统,或者重新启动系统. 它会发送一个WM_QUERYENDSESSION消息给所有的应用程序, ...

  9. Oracle 和 SqlServer 的区别

    --sql server 与  oracle的区别: --DBMS 数据库管理系统--1.数据类型不同.      --sql server 的数据类型:int ,smallint ,char,var ...

  10. 寒冬之下,浩瀚智能开单收银打印扫描POS为何能在批发零售门店商场 车销行业 风靡!:进销存+打印扫描POS机

    是一款适用于商超.餐饮.服装鞋帽.家电专营等等具有零售行业特点的企业,供企业管理人员用于管理.监控本品牌的市场占有率.门店覆盖区域.网点分布合理性等经济地理信息的工具平台. 1,功能一:业务抄单文章来 ...