前几天,领导让我找一下老系统(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 > )
{
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 = ; 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 =
};
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 == )
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[];
Range range;
long totalCount = dt.Rows.Count;
long rowRead = ;
long percent = ;
for (int i = ; i < dt.Columns.Count; i++)
{
worksheet.Cells[, i + ] = dt.Columns[i].ColumnName;
range = worksheet.Cells[, i + ];
range.Interior.ColorIndex = ;
}
for (int i = ; i < dt.Rows.Count; i++)
{
for (int j = ; j < dt.Columns.Count; j++)
{
try
{
worksheet.Cells[i + , j + ] = dt.Rows[i][j].ToString();
}
catch
{
worksheet.Cells[i + , j + ] = dt.Rows[i][j].ToString().Replace("=", "");
}
}
rowRead++;
percent = ( * rowRead) / totalCount;
}
worksheet.Columns.EntireColumn.AutoFit();//列宽自适应
worksheet.Shapes.AddTextEffect(MsoPresetTextEffect.msoTextEffect1, " ", "Red", , MsoTriState.msoFalse, MsoTriState.msoTrue, , );
xlApp.Visible = true;
}

导出excel

工具下载

从java文件和CS文件里查询方法使用次数工具的更多相关文章

  1. .wsdl文件生成.cs文件

    1.打开VS文件命令行工具(一般在安装文件的Common7\Tools\Shortcuts下面例如[E:\VS2013安装程序\Common7\Tools\Shortcuts\VS2013 x64 本 ...

  2. .resx文件与.cs文件的自动匹配

    图中myCommands.Resx是<DependentUpon> myCommands.cs文件的. 如何为其他的.cs文件添加类似的资源文件呢? 其实挺简单, 添加与.cs文件同名的资 ...

  3. protoc文件生成cs文件

    1.下载protoc工具  点击下载 2.下载解压后打开文件,其中有一个.bat文件,里面对应命令行如下: 编写如下命令行 protoc.exe -I=. --csharp_out=. --grpc_ ...

  4. xsd文件生成cs文件命令

    C:\Windows\System32>xsd.exe c:/Createst.xsd -c C:\Windows\System32>xsd.exe c:/Creauest.xsd /c ...

  5. 如何将编写好的CS文件做成exe可执行文件

    编译好的控制台CS文件: cs文件单独拿出来放到F盘目录中 打开命令提示CMD: 执行下面语句即可在F盘目录中看到生成的exe文件,windows系统下双击就可运行: C:\Windows\Micro ...

  6. C# 在类文件自动添加文件注释的方法

    对于vs2013来讲, 步骤: 1.VS2013 中找到(安装盘符以C盘为例)C:\ProgramFiles(x86)\Microsoft VisualStudio12.0\Common7\IDE\I ...

  7. 利用java反射调用类的的私有方法--转

    原文:http://blog.csdn.net/woshinia/article/details/11766567 1,今天和一位朋友谈到父类私有方法的调用问题,本来以为利用反射很轻松就可以实现,因为 ...

  8. jar包里查找指定的class文件,排查是否存在或重复,工具软件:Java Class Finder

    jar包里查找指定的class文件,排查是否存在或重复,工具软件:Java Class Finder 1,下载工具地址:www.idesksoft.com/classfinder.html,如图: 2 ...

  9. java 查询路径中所有文件夹和文件的名称,支持文件名模糊查询

    java 查询路径中所有文件夹和文件的名称,支持文件名模糊查询 有时候我们遇到需要查询服务器或者本机某个路径下有哪些文件?或者根据文件名称模糊搜索文件,那么就可以使用本方法:可以获取某个路径下所有文件 ...

随机推荐

  1. In-Memory:内存数据库

    在逝去的2016后半年,由于项目需要支持数据的快速更新和多用户的高并发负载,我试水SQL Server 2016的In-Memory OLTP,创建内存数据库实现项目的负载需求,现在项目接近尾声,系统 ...

  2. ASP.NET Aries 入门开发教程4:查询区的下拉配置

    背景: 今天去深圳溜达了一天,刚回来,看到首页都是微软大法好,看来离.NET的春天就差3个月了~~ 回到正题,这篇的教程讲解下拉配置. 查询区的下拉配置: 1:查询框怎么配置成下拉? 在配置表头:格式 ...

  3. 学习ASP.NET Core, 怎能不了解请求处理管道[3]: 自定义一个服务器感受一下管道是如何监听、接收和响应请求的

    我们在<服务器在管道中的"龙头"地位>中对ASP.NET Core默认提供的具有跨平台能力的KestrelServer进行了介绍,为了让读者朋友们对管道中的服务器具有更 ...

  4. node模块加载层级优化

    模块加载痛点 大家也或多或少的了解node模块的加载机制,最为粗浅的表述就是依次从当前目录向上级查询node_modules目录,若发现依赖则加载.但是随着应用规模的加大,目录层级越来越深,若是在某个 ...

  5. JDK动态代理

    一.基本概念 1.什么是代理? 在阐述JDK动态代理之前,我们很有必要先来弄明白代理的概念.代理这个词本身并不是计算机专用术语,它是生活中一个常用的概念.这里引用维基百科上的一句话对代理进行定义: A ...

  6. ActiveRecord模式整理

    DAO Data Access Object,数据访问对象 DAO是一个软件设计的指导原则,在核心J2EE模式中是这样介绍DAO模式的:为了建立一个健壮的J2EE应用,应该将所有对数据源的访问操作抽象 ...

  7. springmvc 多数据源 SSM java redis shiro ehcache 头像裁剪

    获取下载地址   QQ 313596790  A 调用摄像头拍照,自定义裁剪编辑头像 B 集成代码生成器 [正反双向](单表.主表.明细表.树形表,开发利器)+快速构建表单;  技术:31359679 ...

  8. 网站里加入QQ在线客服

    1.开启"QQ在线状态"服务  http://jingyan.baidu.com/article/b24f6c823425a586bfe5da1f.html http://www. ...

  9. DevExpress - 使用 GaugeControl 标尺组件制作抽奖程序 附源码

    前不久,公司举办了15周年庆,其中添加了一个抽奖环节,要从在读学员中随机抽取幸运学员,当然,这个任务就分到了我这里. 最后的效果如下,启动有个欢迎页面,数据是来自Excel的,点击开始则上面的学号及姓 ...

  10. 关系型数据库与NoSQL数据库

    关系型数据库的优缺点 优点: 可以做事务处理,从而保证了数据的一致性: 可以进行JOIN等多表查询: 由于以SQL标准化为前提,数据更新的开销很小(相同的字段基本上都只有一处). 缺点: 大量数据的写 ...