- 首先给出的地址有两种可能性,一种是文件夹的地址,另一种就是文件的地址,先来个简单的,假设给出的地址就是文件的地址
1 // 以文件路径为参数统计文件行数的函数 2 NSInteger codeLineCount(NSString *path){ 3 // 将目标文件内容转换成OC字符串 4 NSString *contents = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil]; 5 // 将字符创分割成OC数组 6 NSArray *array = [contents componentsSeparatedByString:@" "]; 7 // 返回数组的元素个数 8 return array.count; 9 }
如果函数的参数是文件夹路径那么我们将会用到NSFilemanager这个类
1 // 以文件路径为参数统计文件行数的函数 2 NSInteger codeLineCount(NSString *path){ 3 // 统计代码行数 4 NSInteger lineCount = 0; 5 // 将目标文件内容转换成OC字符串 6 NSString *contents = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil]; 7 // 获取文件夹管理者 8 NSFileManager *filemanager = [NSFileManager defaultManager]; 9 // 标记是否为文件夹 10 BOOL dir = YES; 11 // 标记路径是否存在 12 BOOL exist = [filemanager fileExistsAtPath:path isDirectory:&dir]; 13 if(!exist){ 14 NSLog(@"所传路径不存在"); 15 return 0; 16 } 17 if (dir) {// 文件夹 18 // 获取文件夹里面的所有文件和文件夹 19 NSArray *array = [filemanager contentsOfDirectoryAtPath:path error:nil]; 20 for (NSString *filename in array) { 21 // 获取文件夹内各文件或者文件夹的路径 22 NSString *fullpath = [NSString stringWithFormat:@"%@/%@",path, filename]; 23 // 函数递归调用 24 lineCount += codeLineCount(fullpath); 25 } 26 } 27 else{// 文件 28 // 获取文件的扩展名 29 NSString *extension = [path pathExtension]; 30 // 将扩展名除了m、h、c以外的文件过滤掉 31 if(![extension isEqualToString:@"m"] 32 &&![extension isEqualToString:@"c"] 33 &&![extension isEqualToString:@"h"]){ 34 return 0; 35 } 36 // 将字符创分割成OC数组 37 NSArray *array = [contents componentsSeparatedByString:@" "]; 38 39 // 返回数组的元素个数 40 return array.count; 41 } 42 return lineCount; 43 }
说明:以上代码是看完视屏后自己凭着印象敲的,途中有几个重要方法和函数没想起来