------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
这是mj老师讲过的计算代码行数的实例,要用到NSArry与NSString,从这个程序中可以看到这两个类的经典方法的运用和读取文件内容及遍历文件内容的方法,还有递归的思想。其中标红为要掌握内容。
NSUInteger codeLineCount(NSString *path)
{
<span style="color:#ff6666;">// 1.获得文件管理者</span>
NSFileManager *mgr = [NSFileManager defaultManager];
<span style="color:#ff0000;">// 2.标记是否为文件夹</span>
BOOL dir = NO; // 标记是否为文件夹
// 标记这个路径是否存在
BOOL exist = [mgr fileExistsAtPath:path isDirectory:&dir];
<span style="color:#ff6666;"> // 3.如果不存在,直接返回0</span>
if(!exist)
{
NSLog(@"文件路径不存在!!!!!!");
return 0;
}
// 代码能来到着,说明路径存在
if (dir)
{ // 文件夹
<span style="color:#ff0000;">// 获得当前文件夹path下面的所有内容(文件夹、文件)</span>
NSArray *array = [mgr contentsOfDirectoryAtPath:path error:nil];
<span style="color:#ff0000;"> // 定义一个变量保存path中所有文件的总行数</span>
int count = 0;
<span style="color:#ff0000;"> // 遍历数组中的所有子文件(夹)名</span>
for (NSString *filename in array)
{
<span style="color:#ff6666;">// 获得子文件(夹)的全路径</span>
NSString *fullPath = [NSString stringWithFormat:@"%@/%@", path, filename];
// 累加每个子路径的总行数
count += codeLineCount(fullPath);
}
return count;
}
else
{ // 文件
<span style="color:#ff0000;">// 判断文件的拓展名(忽略大小写)</span>
NSString *extension = [[path pathExtension] lowercaseString];
if (![extension isEqualToString:@"h"]
&& ![extension isEqualToString:@"m"]
&& ![extension isEqualToString:@"c"])
{
// 文件拓展名不是h,而且也不是m,而且也不是c
return 0;
}
<span style="color:#ff0000;">// 加载文件内容</span>
NSString *content = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
<span style="color:#ff0000;"> // 将文件内容切割为每一行</span>
NSArray *array = [content componentsSeparatedByString:@"\n"];
// 删掉文件路径前面的/Users/apple/Desktop/iOS课堂共享/0722课堂共享/
NSRange range = [path rangeOfString:@"/Users/apple/Desktop/iOS课堂共享/0722课堂共享/"];
NSString *str = [path stringByReplacingCharactersInRange:range withString:@""];
// 打印文件路径和行数
NSLog(@"%@ - %ld", str, array.count);
return array.count;
}
}
int main()
{
NSUInteger count = codeLineCount(@"/Users/apple/Desktop/iOS课堂共享/0722课堂共享");
NSLog(@"%ld", count);
return 0;
}