你的位置:首页 > ASP.net教程

[ASP.net教程]从java文件和CS文件里查询方法使用次数工具


前几天,领导让我找一下老系统(Java)里getRemoteUser方法都哪个文件用了,package是什么,方法被调用了多少次,当时因为着急,所以,直接人工找的,但是以后要是再出现,人工找就太讨厌了,毕竟程序员以懒著称,因此,写了一个小工具进行查询。

一、效果图

从图中不难看出,现在的功能只能查询两类文件java和cs,毕竟是针对我们用的,如果想扩展的话,也是没有问题的,毕竟方法是通用的。

最终得到的是一个excel

二、开发过程

1、首先建一个实体类

实体类里面包含包名、文件名和使用次数

class ContentEntity  {    private string _paOrns;    private string _fileName;    private int useCount;    /// <summary>    /// package或者是NameSpace    /// </summary>    public string PaOrns    {      get      {        return _paOrns;      }      set      {        _paOrns = value;      }    }    /// <summary>    /// 文件名    /// </summary>    public string FileName    {      get      {        return _fileName;      }      set      {        _fileName = value;      }    }    /// <summary>    /// 使用次数    /// </summary>    public int UseCount    {      get      {        return useCount;      }      set      {        useCount = value;      }    }  }

实体类

2、截取字段

因为要从Java文件里取出package后面的内容,CS文件里取出NameSpace后面的内容,因此需要用到截取字段,这个小工具的开发并没有用SubString来截取字段,而是用的正则表达式

class Match  {    /// <summary>    /// 获取java的package    /// </summary>    /// <param name="str"></param>    /// <returns></returns>    public static string GetPackage(string str)    {      return Regex.Match(str, "(?<=package).*?(?=;)").Value;    }    /// <summary>    /// 获取C#的NameSpace    /// </summary>    /// <param name="str"></param>    /// <returns></returns>    public static string GetNamespace(string str)    {      return Regex.Match(str, "(?<=namespace).*?(?=\r)").Value;    }    /// <summary>    /// 获取文件名    /// </summary>    /// <param name="str"></param>    /// <returns></returns>    public static string GetFileName(string str)    {      return Regex.Match(str, "(?<=_).*?(?=_)").Value;    }    /// <summary>    /// 获取命名空间    /// </summary>    /// <param name="str"></param>    /// <returns></returns>    public static string GetPaOrNs(string str)    {      return Regex.Match(str, "^.*?(?=_)").Value;    }  }

正则截取字段

3、读取文件夹下文件

循环遍历选择的文件夹路径下的所有文件

/// <summary>    /// 取得指定路径下所有目录及文件名称(可递归)    /// </summary>    /// <param name="strDir">指定路径</param>    /// <param name="strFilePattern">要与 strDir 中的文件名匹配的搜索字符串    /// “*.abc*”返回扩展名为 .abc、.abcd、.abcde、.abcdef 等的文件。    /// “*.abcd”只返回扩展名为 .abcd 的文件。    /// “*.abcde”只返回扩展名为 .abcde 的文件。    /// </param>    /// <param name="arrDirs">查询得到的所有目录</param>    /// <param name="arrFiles">查询得到的所有文件名称</param>    /// <param name="bIsRecursive">是否递归查询</param>    /// <returns></returns>    private static List<string> GetFileList(string strDir, string strFilePattern, List<string> arrDirs, List<string> arrFiles, bool bIsRecursive)    {      DirectoryInfo dirInfo = new DirectoryInfo(strDir);      if (string.IsNullOrEmpty(strDir))        return null;      try      {        //取得指定路径下的所有符合条件的文件        FileInfo[] strFiles = dirInfo.GetFiles(strFilePattern);        //取得指定路径下的所有目录        DirectoryInfo[] strDirs = dirInfo.GetDirectories();        foreach (FileInfo item in strFiles)        {//将所有文件名称加入arrFiles中          arrFiles.Add(item.FullName);        }        foreach (DirectoryInfo item in strDirs)        {//将所有目录名称加入arrDirs中          arrDirs.Add(item.FullName);        }        if (bIsRecursive)        {//递归          if (strDirs.Length > 0)          {            foreach (DirectoryInfo item in strDirs)            {//递归遍历所有文件夹              GetFileList(item.FullName, strFilePattern, arrDirs, arrFiles, bIsRecursive);            }          }        }      }      catch (Exception)      {        throw;      }      return arrFiles;    }

读取文件夹下的文件

4、读取需要的文件

读取java或cs文件,并判断里面是否存在要搜索的关键字

/// <summary>    /// 获取包含查询内容的集合    /// </summary>    /// <param name="path">路径</param>    /// <param name="searchStr">要查询的内容</param>    public static List<ContentEntity> GetInfoIncludeSearchStr(string path, string searchStr, string type)    {      List<ContentEntity> ceList = new List<ContentEntity>();      ContentEntity ce;      //获取查询内容的长度      int strLength = searchStr.Length;      //包含路径的所有集合      List<string> AllFile = GetFileList(path, type, new List<string>(), new List<string>(), true);      foreach (string item in AllFile)      {        FileStream fs = new FileStream(item, FileMode.Open, FileAccess.Read, FileShare.None);        StreamReader sr = new StreamReader(fs);        //读取文件的内容        string strLine = sr.ReadToEnd();        if (strLine.Length >= strLength)        {          for (int i = 0; i < strLine.Length - strLength; i++)          {            //判断是否包含查询的内容            if (strLine.Substring(i, strLength).Equals(searchStr))            {              ce = new ContentEntity()              {                PaOrns = type == FileType.type_Java ? Match.GetPackage(strLine) : Match.GetNamespace(strLine),//判断是哪种类型,选择不同的处理方式                FileName = Path.GetFileName(item),                UseCount = 1              };              ceList.Add(ce);            }          }        }        //关闭        sr.Close();        fs.Close();      }      return ceList;    }

查询关键字

5、导出到excel

将最终得到的结果导出到excel,并打开excel

public static void ExportExcel(System.Data.DataTable dt)    {      if (dt == null || dt.Rows.Count == 0)        return;      Application xlApp = new Application();      if (xlApp == null)        return;      CultureInfo CurrentCI = Thread.CurrentThread.CurrentCulture;      Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");      Workbooks workbooks = xlApp.Workbooks;      Workbook workbook = workbooks.Add(XlWBATemplate.xlWBATWorksheet);      Worksheet worksheet = workbook.Worksheets[1];      Range range;      long totalCount = dt.Rows.Count;      long rowRead = 0;      long percent = 0;      for (int i = 0; i < dt.Columns.Count; i++)      {        worksheet.Cells[1, i + 1] = dt.Columns[i].ColumnName;        range = worksheet.Cells[1, i + 1];        range.Interior.ColorIndex = 15;      }      for (int i = 0; i < dt.Rows.Count; i++)      {        for (int j = 0; j < dt.Columns.Count; j++)        {          try          {            worksheet.Cells[i + 2, j + 1] = dt.Rows[i][j].ToString();          }          catch           {            worksheet.Cells[i + 2, j + 1] = dt.Rows[i][j].ToString().Replace("=", "");          }        }        rowRead++;        percent = (100 * rowRead) / totalCount;      }      worksheet.Columns.EntireColumn.AutoFit();//列宽自适应      worksheet.Shapes.AddTextEffect(MsoPresetTextEffect.msoTextEffect1, " ", "Red", 15, MsoTriState.msoFalse, MsoTriState.msoTrue, 150, 200);      xlApp.Visible = true;    }

导出excel

 

 

工具下载

源码过两天上传Github