iOS-统计项目代码量

- (void)viewDidLoad {

[super viewDidLoad];

// 注意:代码得在Mac下跑,不能再iPhone上,路径不对

// 在这里写下需要统计的代码的目录

NSString *path = @"/Users/crystal/projects/CodeLineDemo";

NSLog(@"在这个文件中代码行数是:%ld",codeLineCount(path,path));

}

//统计代码行数函数(运用递归)

// 这就是实现功能的方法,行参是一个路径

NSUInteger codeLineCount(NSString *path,NSString *rootPath)

{

NSUInteger num = 0;

// 判断是否是文件夹,如果说file是文件夹的时候就是YES不是文件夹的话就是NO

BOOL flag = NO;

// 首先判断这个文件存不存在,存在的话是文件还是文件夹

// 关于文件目录的操作,取得文件管理器的单例对象

NSFileManager *file = [NSFileManager defaultManager];

BOOL isExit = [file fileExistsAtPath:path isDirectory:&flag];

if(!isExit){

NSLog(@"路经有误!!!");

return 0;

}else{

// 如果说他是文件夹的话,就得到他的里面去把文件找出来

if(flag){

// 获取这个文件夹中的所有的文件名字

NSArray *a = [file contentsOfDirectoryAtPath:path error:nil];

for(id fileName in a){

//  获得所有文件的完全路径

NSString *s1 = [NSString stringWithFormat:@"%@/%@",path,fileName];

num  = num + codeLineCount(s1,rootPath);

}

}else{

// 如果说是文件并且扩展名是.h 或者是.m的话就直接进行统计

NSString *h = @"h";

NSString *m = @"m";

NSString *c = @"c";

NSString *mm = @"mm";

NSString *swift = @"swift";

//查看扩展名是否是上面这三个但是,扩展名又可能是大写,所以这个时候就要先把扩展名转为小写再比较

NSString *pathE = [[path pathExtension] lowercaseString];

NSRange rect = [path rangeOfString:rootPath];

NSString *newPath = [path stringByReplacingCharactersInRange:rect withString:@""];

if([pathE isEqualToString:h] || [pathE isEqualToString:m] || [pathE isEqualToString:c] || [pathE isEqualToString:mm]|| [pathE isEqualToString:swift]){

num = test(path);

NSLog(@"%@  ---  %ld行",newPath,num);

}else{

return 0;

}

}

}

return num;

}

NSUInteger test(NSString *path)

{

// 可以首先获取文件中的内容,然后利用字符串分割计数将空格字符串以回车分割,这个时候会生成一个数组,这个时候我就可以通过计算数组中的元素来计算文档中的行数了

NSString *s1 = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];

// 利用字符串分割函数,将字符串分割生成一个数组

NSArray *a = [s1 componentsSeparatedByString:@"\n"];

return a.count;

}

Demo下载地址

你可能感兴趣的:(iOS-统计项目代码量)