java 中的cs_从java文件和CS文件里查询方法使用次数工具

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

一、效果图

15321bde202193f2bd8100e0210f3fd2.png

2e025e3b61ee43d562f3de1f5ba06374.png

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

最终得到的是一个excel

d81c32a2d663a059b1675e430d45f48b.png

0cf8dc04e394ba44faf163681b2f1558.png

二、开发过程

1、首先建一个实体类

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

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

classContentEntity

{private string_paOrns;private string_fileName;private intuseCount;///

///package或者是NameSpace///

public stringPaOrns

{get{return_paOrns;

}set{

_paOrns=value;

}

}///

///文件名///

public stringFileName

{get{return_fileName;

}set{

_fileName=value;

}

}///

///使用次数///

public intUseCount

{get{returnuseCount;

}set{

useCount=value;

}

}

}

实体类

2、截取字段

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

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

classMatch

{///

///获取java的package///

///

///

public static string GetPackage(stringstr)

{return Regex.Match(str, "(?<=package).*?(?=;)").Value;

}///

///获取C#的NameSpace///

///

///

public static string GetNamespace(stringstr)

{return Regex.Match(str, "(?<=namespace).*?(?=\r)").Value;

}///

///获取文件名///

///

///

public static string GetFileName(stringstr)

{return Regex.Match(str, "(?<=_).*?(?=_)").Value;

}///

///获取命名空间///

///

///

public static string GetPaOrNs(stringstr)

{return Regex.Match(str, "^.*?(?=_)").Value;

}

}

正则截取字段

3、读取文件夹下文件

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

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

///

///取得指定路径下所有目录及文件名称(可递归)///

/// 指定路径

/// 要与 strDir 中的文件名匹配的搜索字符串///“*.abc*”返回扩展名为 .abc、.abcd、.abcde、.abcdef 等的文件。///“*.abcd”只返回扩展名为 .abcd 的文件。///“*.abcde”只返回扩展名为 .abcde 的文件。///

/// 查询得到的所有目录

/// 查询得到的所有文件名称

/// 是否递归查询

///

private static List GetFileList(string strDir, string strFilePattern, List arrDirs, List arrFiles, boolbIsRecursive)

{

DirectoryInfo dirInfo= newDirectoryInfo(strDir);if (string.IsNullOrEmpty(strDir))return null;try{//取得指定路径下的所有符合条件的文件

FileInfo[] strFiles =dirInfo.GetFiles(strFilePattern);//取得指定路径下的所有目录

DirectoryInfo[] strDirs =dirInfo.GetDirectories();foreach (FileInfo item instrFiles)

{//将所有文件名称加入arrFiles中

arrFiles.Add(item.FullName);

}foreach (DirectoryInfo item instrDirs)

{//将所有目录名称加入arrDirs中

arrDirs.Add(item.FullName);

}if(bIsRecursive)

{//递归

if (strDirs.Length > 0)

{foreach (DirectoryInfo item instrDirs)

{//递归遍历所有文件夹

GetFileList(item.FullName, strFilePattern, arrDirs, arrFiles, bIsRecursive);

}

}

}

}catch(Exception)

{throw;

}returnarrFiles;

}

读取文件夹下的文件

4、读取需要的文件

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

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

///

///获取包含查询内容的集合///

/// 路径

/// 要查询的内容

public static List GetInfoIncludeSearchStr(string path, string searchStr, stringtype)

{

List ceList = new List();

ContentEntity ce;//获取查询内容的长度

int strLength =searchStr.Length;//包含路径的所有集合

List AllFile = GetFileList(path, type, new List(), new List(), true);foreach (string item inAllFile)

{

FileStream fs= newFileStream(item, FileMode.Open, FileAccess.Read, FileShare.None);

StreamReader sr= newStreamReader(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= newContentEntity()

{

PaOrns= type == FileType.type_Java ? Match.GetPackage(strLine) : Match.GetNamespace(strLine),//判断是哪种类型,选择不同的处理方式

FileName =Path.GetFileName(item),

UseCount= 1};

ceList.Add(ce);

}

}

}//关闭

sr.Close();

fs.Close();

}returnceList;

}

查询关键字

5、导出到excel

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

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

public static voidExportExcel(System.Data.DataTable dt)

{if (dt == null || dt.Rows.Count == 0)return;

Application xlApp= newApplication();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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值