本文是计算代码行数的一个方法的工具类。
Utils.h文件
//
// Utils.h
//
// Created by yzy on 17/7/25.
// Copyright © 2017年 Lord_Air. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface Utils : NSObject
- (int)codeLines:(NSString *)path;
- (int)fileCodeLines:(NSString *)filePath;
+ (id)util;
@end
Utils.m文件
//
// Utils.m
//
// Created by yzy on 17/7/25.
// Copyright © 2017年 Lord_Air. All rights reserved.
//
#import "Utils.h"
@implementation Utils
- (int)codeLines:(NSString *)path{
NSFileManager *manage = [NSFileManager defaultManager]; //获取NSFileManager管理类
BOOL isDir = NO ;
BOOL isExist = [manage fileExistsAtPath:path isDirectory:&isDir]; //返回值是文件是否存在,后面的接受是否是文件夹
int result = 0 ;
if(isExist){
if(isDir){ //文件夹
NSArray *files = [manage contentsOfDirectoryAtPath:path error:nil]; //获取文件夹中的所有文件,只会返回一个相对的路径
for(NSString *fileName in files){ //递归调用遍历文件计算行数
result += [self codeLines:[NSString stringWithFormat:@"%@/%@",path,fileName]];
}
}else{//文件
NSString *extension = [[path pathExtension]lowercaseString]; //获取字符串的拓展名,不包含,强制转化为小写
if([extension isEqualToString:@"c"] || [extension isEqualToString:@"m"] || [extension isEqualToString:@"h"]){ //必须为.c,.m,.h文件
result += [self fileCodeLines:path];
}else{
NSLog(@"%@文件不是源代码文件",[path lastPathComponent]);
}
}
}
return result;
}
- (int)fileCodeLines:(NSString *)filePath{
int result = 0 ;
NSFileManager *fManager = [NSFileManager defaultManager];
BOOL isExist = [fManager fileExistsAtPath:filePath];
if(isExist){
NSString *content = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil];
result += [content componentsSeparatedByString:@"\n"].count; //以\n分割
NSString *fileName = [filePath lastPathComponent]; //获取文件名称
NSLog(@"%@的文件共有%d行代码",fileName,result);
}else{
NSLog(@"文件路径不存在");
}
return result;
}
+ (id)util{
return [[self alloc]init];
}
@end