• 遍历多个文件,将文件中的注释去掉


    package com.shine.eiuop.utils;

    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 FileTransUtils {

    /** 根目录 */
    public static String rootDir = "C:\Users\14423\Desktop\亚强\msp中文翻译\msp2\msp\src";
    //"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,
    "GBK"));
    try {
    line = reader.readLine();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } // 读取第一行
    while (line != null) { // 如果 line 为空说明读完了
    buffer.append(line); // 将读到的内容添加到 buffer 中
    buffer.append(" "); // 添加换行符
    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("GBK");
    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;

    }

    }

  • 相关阅读:
    第二章作业
    算法第五章作业及学期总结
    71 最大子列和问题 | 采用二分法+递归
    算法第一章作业
    算法第四章作业
    算法第三章作业
    Windows charles安装、配置及Android手机ca证书
    git出现fatal: Authentication failed for 'http:xxxx.git/''错误的解决办法
    如何用c#将十六进制转换成字符串?
    系统配置win7(64位),vs2010,没有注册类别 (异常来自 HRESULT:0x80040154 (REGDB_E_CLASSNOTREG))
  • 原文地址:https://www.cnblogs.com/lwh-12345/p/13358298.html
Copyright © 2020-2023  润新知