★ java刪除代碼註釋

package com.witwicky.util;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

/**
 * 刪除Java代碼中的註釋
 * 
 * @author Alive
 * @build 2010-12-23
 */
public class DeleteComments {

	private static int count = 0;

	/**
	 * 刪除文件中的各類註釋,包含//、/* * /等
	 * 
	 * @param charset
	 *            文件編碼
	 * @param file
	 *            文件
	 */
	public static void clearComment(File file, String charset) {
		try {
			// 遞歸處理文件夾
			if (!file.exists()) {
				return;
			}

			if (file.isDirectory()) {
				File[] files = file.listFiles();
				for (File f : files) {
					clearComment(f, charset); // 遞歸調用
				}
				return;
			} else if (!file.getName().endsWith(".java")) {
				// 非java文件直接返回
				return;
			}
			System.out.println("-----開始處理文件:" + file.getAbsolutePath());

			// 根據對應的編碼格式讀取
			BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file), charset));
			StringBuffer content = new StringBuffer();
			String tmp = null;
			while ((tmp = reader.readLine()) != null) {
				content.append(tmp);
				content.append("\n");
			}
			reader.close();
			String target = content.toString();
			// String s =
			// target.replaceAll("\\/\\/[^\\n]*|\\/\\*([^\\*^\\/]*|[\\*^\\/*]*|[^\\**\\/]*)*\\*\\/",
			// ""); //本段正則摘自網上,有一種狀況沒法知足(/* ...**/),略做修改
			String s = target.replaceAll("\\/\\/[^\\n]*|\\/\\*([^\\*^\\/]*|[\\*^\\/*]*|[^\\**\\/]*)*\\*+\\/", "");
			// System.out.println(s);
			// 使用對應的編碼格式輸出
			BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), charset));
			out.write(s);
			out.flush();
			out.close();
			count++;
			System.out.println("-----文件處理完成---" + count);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public static void clearComment(String filePath, String charset) {
		clearComment(new File(filePath), charset);
	}

	public static void clearComment(String filePath) {
		clearComment(new File(filePath), "UTF-8");
	}

	public static void clearComment(File file) {
		clearComment(file, "UTF-8");
	}

	public static void main(String[] args) {
		// clearComment("D:\\eclipse3.3\\workspace\\Sanguosha"); //
		// 刪除目錄下全部java文件註釋
		// 刪除某個具體文件的註釋
		clearComment("C:\\Users\\Administrator\\Desktop\\Observable.java");
	}

}
相關文章
相關標籤/搜索