import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List; public class JDGUIRemarkRemover {
private int counter = 0; public JDGUIRemarkRemover() {
}; public static void main(String[] args) {
String filePath = ""; //放待处理的文件路径或者文件夹路径 JDGUIRemarkRemover jdGUIRemarkRemover = new JDGUIRemarkRemover();
if (jdGUIRemarkRemover.process(filePath)) {
System.out.println("处理java文件 " + jdGUIRemarkRemover.getCounter() + "个!");
} else {
System.err.println("处理失败!");
}
} private boolean process(String s) {
File f = new File(s); if (!f.exists()) {
return false;
} if (f.isFile()) {
try {
erase(f);
} catch (RuntimeException ex) {
System.err.println(ex.getMessage());
}
} else if (f.isDirectory()) {
String[] fs = f.list();
for (String sr : fs) {
sr = f.getAbsolutePath() + File.separator + sr;
process(sr);
}
} else {
System.out.println("参数错误!");
} return true;
} private void erase(File f) throws RuntimeException {
List<String> tmp = new ArrayList<String>(); String name = f.getName();
String path = f.getParent() + File.separator;
BufferedReader br = null; if (!name.endsWith(".java")) {
throw new RuntimeException("不是JAVA文件 : " + name);
} System.out.println("处理文件[" + (path + name) + "]"); try {
br = new BufferedReader(new FileReader(f));
String s = null;
while ((s = br.readLine()) != null) {
tmp.add(s);
}
br.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} f.delete(); File copy = new File(path + name);
BufferedWriter bw = null;
try {
copy.createNewFile(); bw = new BufferedWriter(new FileWriter(copy, true)); for (Iterator<String> itr = tmp.iterator(); itr.hasNext();) {
String s = itr.next(); if (s.contains("Location:") || s.contains("Qualified Name:")
|| s.contains("JD-Core Version:")) {
counter++;
return;
} int begin = s.indexOf("/*");
int end = s.indexOf("*/"); if (end != -1 && begin != -1) {
s = s.substring(end - begin + 3, s.length());
} bw.write(s + "\n");
bw.flush();
}
} catch (IOException e) {
e.printStackTrace();
} counter++;
} private int getCounter() {
return counter;
}
}

去掉java反编译(JD-GUI)生成的源文件中注释的更多相关文章

  1. 转:介绍几个著名的实用的Java反编译工具,提供下载

    from :http://www.glorze.com/219.html 反编译 众所周知,我们将源代码进行编译,生成可执行的程序或者容器发布包,这个将代码转换的过程就是编译的过程,而反编译就是将这些 ...

  2. Java 反编译工具哪家强?对比分析瞧一瞧

    前言 Java 反编译,一听可能觉得高深莫测,其实反编译并不是什么特别高级的操作,Java 对于 Class 字节码文件的生成有着严格的要求,如果你非常熟悉 Java 虚拟机规范,了解 Class 字 ...

  3. eclipse安装JAVA反编译插件

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

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

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

  5. 7 款开源 Java 反编译工具

    今天我们要来分享一些关于Java的反编译工具,反编译听起来是一个非常高上大的技术词汇,通俗的说,反编译是一个对目标可执行程序进行逆向分析,从而得到原始代码的过程.尤其是像.NET.Java这样的运行在 ...

  6. myeclipse和eclipse安装Java反编译插件

    为myeclipse和eclipse安装Java反编译插件    插件所需包 1.解压jad1.5.8g.zip.将jad.exe放到jre的bin目录下,下载地址: http://ishare.ia ...

  7. 7款开源Java反编译工具

    今天我们要来分享一些关于Java的反编译工具,反编译听起来是一个非常高上大的技术词汇,通俗的说,反编译是一个对目标可执行程序进行逆向分析,从而得到原始代码的过程.尤其是像.NET.Java这样的运行在 ...

  8. Java 反编译工具下载

    反编译,通俗来讲,就是将.java 文件经过编译生成的 .class 文件还原.注意这里的还原不等于 .java 文件.因为Java编译器在编译.java 文件的时候,会对代码进行一些处理. 那么接下 ...

  9. Java反编译工具(Java Decompiler)

    Java Decompiler是一种非常实用的JAVA反编译工具,可以对整个jar包进行反编译,也可以将其集成到eclipse上,非常方便的根据class文件的源码.,官网地址http://jd.be ...

随机推荐

  1. 【转】使用 vim + ctags + cscope + taglist 阅读源码

    原文网址:http://my.oschina.net/u/554995/blog/59927 最近,准备跟学长一起往 linux kernel 的门里瞧瞧里面的世界,虽然我们知道门就在那,但我们还得找 ...

  2. Delphi流的操作 转

    一.流的概念 流简单说是建立在面向对象基础上的一种抽象的处理数据的工具,它定义了一些处理数据的基本操作,如读取数据,写入数据等,程序员只需掌握对流进行操作,而不用关心流的另一头数据的真正流向.其实,流 ...

  3. 除了修改WEBCONFIG会导致WEB服务重启外,还有其他的什么操作会导致重启?

    1.修改WEBCONFIG文件 2.BIN文件夹下,添加.删除.覆盖文件 3.IIS应用程序池回收   参考文章:http://blog.csdn.net/hb_gx/archive/2007/05/ ...

  4. Java 四种线程池的用法分析

    1.new Thread的弊端 执行一个异步任务你还只是如下new Thread吗? new Thread(new Runnable() { @Override public void run() { ...

  5. 马士兵 Servlet_JSP(2) JSP源代码)

    1.最简单的JSP HelloWorld.jsp <html>     <head>         <title>Hello</title>     ...

  6. MySQL精粹

    关于Mysql整理的需要记忆和熟练掌握的内容 1.查询数据表的信息(比如有多少行数据): show table status like 'tab_User' -- 数据表中的数量   2. 使用 ex ...

  7. IOS UIlabel设置文本距离边框距离

    自定义UILabel 继承 UILabel 重写drawTextInRect 方法具体如下: CGRect rect = CGRectMake(rect.origin.x + 5, rect.orig ...

  8. CentOS 6.3中安装OpenCV2.3.1

    下面为自己测试可用的OpenCV在Linux下的安装步骤 .检查并安装相关程序,确保gtk安装成功,否则无法显示图片 yum install gcc-c++ yuminstall gtk-devel. ...

  9. Java之面向对象相关问题集

    面向对象的特征有哪些方面  1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解所有问题,而仅仅是选择当中的一部分,临时不用部分细节. 抽 ...

  10. [RxJS] Reactive Programming - New requests from refresh clicks -- merge()

    Now we want each time we click refresh button, we will get new group of users. So we need to get the ...