黑马程序员——综合练习 计算代码总行数

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

计算代码总行数

思路:1.判断给出的路径是文件还是文件夹

2.如果是文件,用\n把文件分割成一个数组,计算数组元素个数就可以得出文件总行数

如果是文件夹,获得文件夹的所有内容,包括文件和文件夹,然后有递归算出文件夹所有代码的总行数

考察内容:NSString、NSArray、NSFileManager的使用

代码演示:

#import <Foundation/Foundation.h>

NSUInteger codeLineCount(NSString *path);

int main()
{

    NSUInteger count = codeLineCount(@"/Users/fengze/Desktop");
    NSLog(@"%ld",count);
    return 0;
}

NSUInteger codeLineCount(NSString *path)
{
    //1.获取文件管理者
   NSFileManager *mgr = [NSFileManager defaultManager];

    //2.标记是否为文件夹
   BOOL dir = NO;

    //标记这个路径是否存在
    BOOL exist = [mgr fileExistsAtPath:path isDirectory:&dir];

    //3.如果不存在,直接返回0
    if (!exist)
    {
        NSLog(@"文件不存在!!!");
        return 0;
    }

    if (dir)
    {//文件夹
        //获得当前文件夹path下面的所有内容(文件夹、文件)
        NSArray *array = [mgr contentsOfDirectoryAtPath:path error:nil];

        //定义一个变量保存path中所有文件的总行数
        int count = 0;
        // 遍历数组中的所有文件(夹)名
        for(NSString *fileName in array)
        {
            //获得子文件(夹)的全路径
            NSString *fullPath = [NSString stringWithFormat:@"%@%@",path,fileName];
            //累加每个子路径的总行数
            count += codeLineCount(fullPath);
        }
        return count;
    }
    else
    {//文件

       //判断文件的拓展名(忽略大小写)
        NSString *extension = [[path pathExtension] lowercaseString];
        if(!([extension isEqualToString:@"h"]
             &&[extension isEqualToString:@"c"]
             &&[extension isEqualToString:@"m"]))
        {
            //文件拓展名不是h,c,m
            return  0;
        }
         // 加载文件内容
        NSString *content = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
        //将文件内容切割为每一行
        NSArray *array = [content componentsSeparatedByString:@"\n"];

        //删除文件路径前面的/Users/fengze/Desktop/练习/
        NSRange range = [path rangeOfString:@"/Users/fengze/"];
        NSString *str = [path stringByReplacingCharactersInRange:range withString:@""];

        //打印文件路径和行数
        NSLog(@"%@ - %ld",str,array.count);
        return array.count;

    }
}

时间: 2024-10-10 14:46:50

黑马程序员——综合练习 计算代码总行数的相关文章

黑马程序员___综合练习 计算代码总行数

-Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 计算代码总行数 思路:1.判断给出的路径是文件还是文件夹 2.如果是文件,用\n把文件分割成一个数组,计算数组元素个数就可以得出文件总行数 如果是文件夹,获得文件夹的所有内容,包括文件和文件夹,然后有递归算出文件夹所有代码的总行数 考察内容:NSString.NSArray.NSFileManager的使用 代码演示: #import <Foundation/Foundation.h> NSUInte

计算代码总行数

如何通过IO实现计算代码行数 利用BufferReader特有的readline方法计算首先创建一个方法计算 package revie_Io; import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; public class Count { static int

【转载】程序员的成长和代码行数的关系

在2011年John D. Cook写了一篇博客,其中提到: 我的朋友Clift Norris发现了一个基本常数,我称之为Norris常数,一个未经培训的程序员在他或她遇到瓶颈之前能写出的平均代码量.Clift估计这个值是1500行.超过这个数以后,代码会变得如此混乱,以至于本人都无法轻而易举的进行调试和修改. 我还不了解足够多的初级程序员来验证这一结果,不过我自己认识到,程序员生涯的下一个瓶颈将发生在20,000行.我把Norris常数改成2,000那样正好变成十倍. 在我离开大学之后的第一份

黑马程序员-OC特有语法:分类category,给NSString增加方法计算字符串中数字的个数

1:分类的使用场景:想对一个类,扩充一些功能,而又不改变原来类的模型,也不用继承,这时OC中的特有语法:分类可以做到: 当然分类也是一个类,也需要声明和实现,声明在.h文件中,实现在.m文件中,格式如下 // 声明 @interface  类名  (分类名称) @end // 实现 @implementation 类名 (分类名称) @end 2:分类的好处,当一个类比较庞大时,不同的部分可以放到不同的分类中,也方便团队中类的开发: 3:分类使用注意: a:分类不能增加成员变量,只能对原类增加方

黑马程序员_集合

集合1.集合和对象数组的区别: 数组的长度不可变,集合的可变: 数组可以存储基本数据类型和对象,集合只能存储对象. 集合的框架图 集合派系的顶层接口Collection1.Collection集合存储对象的方法: add(E e)将元素存储到集合中 addAll(Collection c)将一个集合添加到另外的集合中2.Collection集合提取对象的方法: 通过迭代器iterator中的方法:hasNext()和next()来取出 Iterator it=new iterator(); wh

黑马程序员学习笔记_OC之给NSString增加分类

---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>.<a href="http://www.itheima.com"target="blank">.Net培训</a>.期待与您交流! ---------------------- 黑马程序员学习笔记_OC

黑马程序员——IO篇

------- android培训.java培训.期待与您交流! ---------- IO(Input Output)流 1.IO流用来处理设备之间的数据传输 2.Java对数据的操作是通过流的方式 3.Java用于操作流的对象都在IO包中 4.流按操作数据分为两种:字节流与字符流 . 字符流的数据字节流其实都能处理,因为无论什么在计算机上最后都是以字节存在的,但是其中有一部分数据它是以文本形式存在的,所以为了方便有了字符流,字符流里融合了编码表,而只有文字用到了编码表,所以字符流用来处理文本

黑马程序员_IO流2

File类 1.File类 不属于流对象.作用:将机器上的路径和目录封装成一个File对象,提供了很多的方法和成员变量,让我们操作目录和路径   目录就是文件夹.路径,指由文件夹组成的到达文件夹的通道. 2.File类的静态成员变量   一共提供的4个变量,掌握的只有2个,跨平台 static String separator  结果\ Windows目录分隔符  Linux下 / static String pathSeparator 结果 ; Windows下的路径与路径之间的分隔符 Lin

【黑马程序员】————基本运算

一.  算术运算 C语言一共有34种运算符,包括了常见的加减乘除运算 1. 加法运算+ 除开能做加法运算,还能表示正号:+5.+90 2. 减法运算- 除开能做减法运算,还能表示符号:-10.-29 3. 乘法运算* 注意符号,不是x,而是* 4. 除法运算/ 注意符号,不是÷,也不是\,而是/ 整数除于整数,还是整数.1/2的值是0,这个并不是二分之一 5. 取余运算(模运算)% 什么是取余:两个整数相除之后的余数 %两侧只能是整数 正负性取决于%左侧的数值 6. 注意点 1>     自动类