Java文件删除所有注释 工具+eclipse批量替换(亲测好使)

最近有个项目要申请著作权,令人比较纠结的是需要提交部分源代码,还必须删除所有注释,变态阿。

百度一阵,好多工具不好使。但是太懒的我还是用工具给整的,不然要死人了。先粘上来工具吧

http://sunbin.iteye.com/blog/1735903

源代码:

工具

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
  
/**  
 * title: 清除注释  
 *   
 * @author Administrator  
 * @时间 2009-7-30:下午09:28:10  
 */  
public class ClearComment {   
  
    /** 根目录 */  
    public static String rootDir = "C:\\Documents and Settings\\Administrator\\桌面\\hx\\src\\org\\hi";   
//"D:\\testdir   
    // D:\\workspace\\proj_map\\src\\com   
    public static void main(String args[]) throws FileNotFoundException,   
           UnsupportedEncodingException {   
 
       deepDir(rootDir);   
 
   }   
 
   public static void deepDir(String rootDir) throws FileNotFoundException,   
           UnsupportedEncodingException {   
       File folder = new File(rootDir);   
       if (folder.isDirectory()) {   
           String[] files = folder.list();   
           for (int i = 0; i < files.length; i++) {   
               File file = new File(folder, files[i]);   
               if (file.isDirectory() && file.isHidden() == false) {   
                   System.out.println(file.getPath());   
                   deepDir(file.getPath());   
               } else if (file.isFile()) {   
                   clearComment(file.getPath());   
               }   
           }   
       } else if (folder.isFile()) {   
           clearComment(folder.getPath());   
       }   
   }   
 
   /**  
    * @param currentDir  
    *            当前目录  
    * @param currentFileName  
    *            当前文件名  
    * @throws FileNotFoundException  
    * @throws UnsupportedEncodingException  
    */  
   /**  
    * @param filePathAndName  
    * @throws FileNotFoundException  
    * @throws UnsupportedEncodingException  
    */  
   public static void clearComment(String filePathAndName)   
           throws FileNotFoundException, UnsupportedEncodingException {   
       StringBuffer buffer = new StringBuffer();   
       String line = null; // 用来保存每行读取的内容   
       InputStream is = new FileInputStream(filePathAndName);   
       BufferedReader reader = new BufferedReader(new InputStreamReader(is,   
               "UTF-8"));   
       try {   
           line = reader.readLine();   
       } catch (IOException e) {   
           // TODO Auto-generated catch block   
           e.printStackTrace();   
       } // 读取第一行   
       while (line != null) { // 如果 line 为空说明读完了   
           buffer.append(line); // 将读到的内容添加到 buffer 中   
           buffer.append("\r\n"); // 添加换行符   
           try {   
               line = reader.readLine();   
           } catch (IOException e) {   
               e.printStackTrace();   
           } // 读取下一行   
       }   
       // 1、清除单行的注释,如: //某某,正则为 :\/\/.*   
       // 2、清除单行的注释,如:/** 某某 */,正则为:\/\*\*.*\*\/   
       // 3、清除单行的注释,如:/* 某某 */,正则为:\/\*.*\*\/   
       // 4、清除多行的注释,如:   
       // /* 某某1   
       // 某某2   
       // */   
       // 正则为:.*/\*(.*)\*/.*   
       // 5、清除多行的注释,如:   
       // /** 某某1   
       // 某某2   
        // */   
        // 正则为:/\*\*(\s*\*\s*.*\s*?)*   
        String filecontent = buffer.toString();   
  
        Map<String, String> patterns = new HashMap<String, String>();   
        patterns.put("([^:])\\/\\/.*", "$1");// 匹配在非冒号后面的注释,此时就不到再遇到http://   
        patterns.put("\\s+\\/\\/.*", "");// 匹配“//”前是空白符的注释   
        patterns.put("^\\/\\/.*", "");   
        patterns.put("^\\/\\*\\*.*\\*\\/$", "");   
        patterns.put("\\/\\*.*\\*\\/", "");   
        patterns.put("/\\*(\\s*\\*\\s*.*\\s*?)*\\*\\/", "");   
        //patterns.put("/\\*(\\s*\\*?\\s*.*\\s*?)*", "");   
        Iterator<String> keys = patterns.keySet().iterator();   
        String key = null, value = "";   
        while (keys.hasNext()) {   
            // 经过多次替换   
            key = keys.next();   
            value = patterns.get(key);   
            filecontent = replaceAll(filecontent, key, value);   
        }   
        System.out.println(filecontent);   
        // 再输出到原文件   
        try {   
            File f = new File(filePathAndName);   
            if (!f.getParentFile().exists()) {   
                f.getParentFile().mkdirs();   
            }   
            FileOutputStream out = new FileOutputStream(filePathAndName);   
            byte[] bytes = filecontent.getBytes("UTF-8");   
            out.write(bytes);   
            out.flush();   
            out.close();   
        } catch (IOException e) {   
            e.printStackTrace();   
        }   
    }   
  
    /**  
     * @param fileContent  
     *            内容  
     * @param patternString  
     *            匹配的正则表达式  
     * @param replace  
     *            替换的内容  
     * @return  
     */  
    public static String replaceAll(String fileContent, String patternString,   
            String replace) {   
        String str = "";   
        Matcher m = null;   
        Pattern p = null;   
        try {   
            p = Pattern.compile(patternString);   
            m = p.matcher(fileContent);   
            str = m.replaceAll(replace);   
        } catch (Exception e) {   
            e.printStackTrace();   
        } finally {   
            m = null;   
            p = null;   
        }   
        // 获得匹配器对象   
        return str;   
  
    }   
  
} 

eclipse正则表达式替换

用上面的工具替换完成以后,还是不放心,一个一个打开看了看,果然。有的部分 /*   注释内容 换行  */ 没有删除掉。
想起来eclipse有批量替换的功能。百度了一下 /* ?? */的正则表达式。解决了
新建一个项目aa(名字随便),把要替换的java文件全部粘进去,报错、缺少jar包不用理会。

Ctrl + H ,或者 主菜单的Search -->File..

Containing text输入:                                    /\*(.|[\r\n])*?\*/
Regular expression(匹配正则表达式): 打上勾。
File name patterns 输入: *.java
Scope:搜索范围 Working set :             aa

      Scope一定不要选择默认的Workspace,不然工作目录全部把注释给干掉了。
      新建aa搜索范围的的方法:
Scope --> Working set:  --> Choose... --> New.. -->Resource --> Working set name:输入 aa  ,选中 aa(刚才新建的项目) --> Finish  -->  选中刚才新建的aa名, -->  OK

回到查找窗口,Replace... 弹出Replace Text Matches窗口 --> Preview -->  OK

亲测,所有文件的注释都删除掉了。
总结:
eclipse批量替换功能很实用,但是假如都用批量替换 比如万一代码出现了 “//目录”等被错误替换就不好了。
工具不错,再次表示感谢。所以使用工具加eclipse很方便,快捷。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值