從java文件和CS文件里查詢方法使用次數工具

来源:http://www.cnblogs.com/ZXdeveloper/archive/2016/07/18/5682230.html
-Advertisement-
Play Games

前幾天,領導讓我找一下老系統(Java)里getRemoteUser方法都哪個文件用了,package是什麼,方法被調用了多少次,當時因為著急,所以,直接人工找的,但是以後要是再出現,人工找就太討厭了,畢竟程式員以懶著稱,因此,寫了一個小工具進行查詢。 一、效果圖 從圖中不難看出,現在的功能只能查詢 ...


前幾天,領導讓我找一下老系統(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


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 今天終於鼓起所有的勇氣,吹散了所有的懶惰去參加了一家小公司的面試,面試方向是PHP工程師,作為從二線城市過來的二線PHPer可謂是備受打擊。在以前憑藉著回答“GET和POST的區別”的面試方式以及不存在了,在整個面試過程中幾乎沒有涉及PHP的基礎知識,問的基本上都是高併發、緩存、大數據量等方面的知識 ...
  • find命令相對於locate這種非實時查找的搜索命令,大大增加了我們搜索的便捷度以及準確性;並且能夠方便的幫助我們對大文件、特定類型的文件查找與刪除,特別是有超多小碎文件的時候,更是方便至極.... -user username:查找屬主是xx的文件 -group group:查找屬組的xx文件 ...
  • 使用以下命令查看: ps -aux | sort -k4,4n ps auxw --sort=rss ps auxw --sort=%cpu linux 下的ps命令 %CPU 進程的cpu占用率 %MEM 進程的記憶體占用率 VSZ 進程所使用的虛存的大小 RSS 進程使用的駐留集大小或者是實際記憶體 ...
  • 1. Excel for Mac 的 Developer tab下沒有XML組,因此無法從xml導入或者導出到xml; 2. Excel for Mac 中沒有Mark as Finnal的功能; 3. Switch Window功能存在於頂部菜單 Window 中; Mac中變為: 4. ...
  • 出現這個錯誤,是系統的glibc版本太低了,需要更新 到http://ftp.gnu.org/gnu/glibc/下載新版本的glibc,也不用太高,我選擇glibc-2.20.tar.gz 解壓完畢後 ./congigure --prefix=/opt/glibc-2.20 make && mak ...
  • 前些天公司項目需要對上傳的圖片打水印,前端採用angularjs,後端nodejs,網上一搜,找到了一個images的庫,在本地Windows環境下試了下還不錯,然後就上傳測試伺服器(centos6.5系統)了,結果就出問題了,網上一查,發現需要gblic2.14(centos6.5系統自帶的是2. ...
  • 但是對於在各個 IT 領域的人們,我們需要將這個事情提高一個層面。我們需要使用像 SSH 密鑰這樣的加密秘鑰,而不只是密碼。 設想一個場景:我有一個運行在雲上的伺服器,用作我的主 git 庫。我有很多台工作電腦,所有這些電腦都需要登錄到這個中央伺服器去做 push 與 pull 操作。這裡我設置 g ...
  • 設計界面: 代碼: using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Data; using System.Linq; usi ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...