黑马程序员-根据本地地址计算文本中有多少行的代码

  • 首先给出的地址有两种可能性,一种是文件夹的地址,另一种就是文件的地址,先来个简单的,假设给出的地址就是文件的地址
    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:@"\n"];
    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:@"\n"];
    38         
    39         // 返回数组的元素个数
    40         return array.count;
    41     }
    42     return lineCount;
    43 }

    说明:以上代码是看完视屏后自己凭着印象敲的,途中有几个重要方法和函数没想起来

posted @ 2015-04-22 08:27  大_智  阅读(140)  评论(0编辑  收藏  举报