删除java注释

 

 

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;  
 
    }  
 

你可能感兴趣的:(java)