程序意圖:
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培訓、期待與您交流! ---------------------------------