黑馬程序員_OC基礎14_計算代碼行數Demo

-------------------------------------android培訓java培訓、期待與您交流! ---------------------------------


程序意圖:

1、考察NSString、NSArray的使用

2、NSFileManager

3、學習程序的編碼思想

#import <Foundation/Foundation.h>


// 計算文件的代碼行數方法
/*
 path : 文件的全路徑(可能是文件夾、也可能是文件)
 返回值 int :代碼行數
 */
NSUInteger codeLineCount(NSString *path)
{
    // 1.獲得文件管理者:包含了用來查詢單詞庫目錄、創建、重命名、刪除目錄以及獲取/設置文件屬性的方法
    NSFileManager *mgr = [NSFileManager defaultManager];
    
    // 2.標記是否爲文件夾
    BOOL dir = NO; // 標記是否爲文件夾
    // exist標記這個路徑是否存在:fileExistsAtPath返回值,默認還會返回dir的值
    BOOL exist = [mgr fileExistsAtPath:path isDirectory:&dir];
    
    // 3.判斷文件路徑:如果不存在,直接返回0,不會執行下面代碼
    if(!exist)
    {
        NSLog(@"文件路徑不存在!!!!!!");
        return 0;
    }
    
    // 代碼能來到着,說明路徑存在
    
    
    //4、分文件夾和文件兩種情況處理
    if (dir)
    { // 1)文件夾處理步驟

        //  a、獲得當前文件夾path下面的所有內容(文件夾、文件)
	// contentsOfDirectoryAtPath傳入兩個參數:路徑名和nil,返回包含這個文件的所有文件名的數組
        NSArray *array = [mgr contentsOfDirectoryAtPath:path error:nil];
        
        // b、定義一個變量保存path中所有文件的總行數
        int count = 0;
        
        // c、遍歷數組中的所有子文件(夾)名
        for (NSString *filename in array)
        {
            // d、獲得子文件(夾)的全路徑
            NSString *fullPath = [NSString stringWithFormat:@"%@/%@", path, filename];
            
            // e、累加每個子路徑的總行數,使用自定義的方法
            count += codeLineCount(fullPath);
        }
        //f、返回總行數
        return count;
    }
    else
    { // 2)文件處理步驟

        // a、pathExtension判斷文件的拓展名(忽略大小寫:lowercaseString將大寫轉成小寫,方便下面判斷) 
        NSString *extension = [[path pathExtension] lowercaseString];
        if (![extension isEqualToString:@"h"]
            && ![extension isEqualToString:@"m"]
            && ![extension isEqualToString:@"c"])
        {
            // 文件拓展名不是h,而且也不是m,而且也不是c
            return 0;
        }
        
        //b、加載文件內容,讀取文件內容stringWithContentsOfFile,參數:文件路徑;NSUTF8StringEncoding;nil
        NSString *content = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
        
        //c、componentsSeparatedByString將文件內容切割爲每一行(換行通過“\n”判斷),保存在數組裏面
        NSArray *array = [content componentsSeparatedByString:@"\n"];
        
        // d、刪掉文件路徑前面的/Users/apple/Desktop/iOS課堂共享/0722課堂共享/
        NSRange range = [path rangeOfString:@"/Users/apple/Desktop/iOS課堂共享/0722課堂共享/"];
	//文件內容替換方法stringByReplacingCharactersInRange
        NSString *str = [path stringByReplacingCharactersInRange:range withString:@""];
        
        // 打印文件路徑和行數
        NSLog(@"%@ - %ld", str, array.count);
        
        return array.count;
    }
}


int main()
{
    //調用自定義codeLineCount方法,返回NSUInteger類型的總行數
    NSUInteger count = codeLineCount(@"/Users/apple/Desktop/iOS課堂共享/0722課堂共享");
    
    // 打印輸出
    NSLog(@"%ld", count);
    return 0;
}


-------------------------------------android培訓java培訓、期待與您交流! ---------------------------------
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章