Java檔案刪除所有註釋 工具+eclipse批量替換(親測好使)
阿新 • • 發佈:2019-02-20
最近有個專案要申請著作權,令人比較糾結的是需要提交部分原始碼,還必須刪除所有註釋,變態阿。
百度一陣,好多工具不好使。但是太懶的我還是用工具給整的,不然要死人了。先粘上來工具吧
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