• 算法积累:解决如何获取指定文件夹路径或者文件路径下所有子文件后缀为.h .m .c的文本的行数


    1、先解决如何获取一个文件的代码行数

    一开始对于这个问题,我的思路就回荡在:1字符串子字符串的判断 2循环直到结束的想法 3将原来是" "替换掉之类的想法

    一个问题总会有多种解决方案,下面的解决方案来自MJ基础视频里讲过的方案,挺不错的,基本思路是:通过" "拆分字符串到OC数组中,最后判断数组的长度即可。

    虽然有时候我们可能想不到更好的方法,但是也不能阻拦我们去积累好的方法,所以纪录在此博文中。

    学习来自 MJ 的某个基础视频

     2、然后进一步考虑一个目录下的所有文件以及目录下的子文件的行数
    思路:<1>这样的话,首先要处理 path 可以是文件所在目录,也可以是文件夹所在的目录。所以就需要NSFileManager对象来处理文件和文件夹。
      NSFileManager可以判断当前目录是对应的文件还是文件夹。
    <2>当如果是文件的话,就执行上面的程序,输出文件的行数。
    <3>当如果是文件夹的话,就需要继续执行方法<1>所以这里就需要用递归来处理这种需要重复执行包含的内容。
    下面就直接给出MJ的代码:
     1 #import <Foundation/Foundation.h>
     2 
     3 void codeLine(NSString *path)
     4 {
     5     //需要获取的内容
     6     NSString* content;
     7     //获取NSFileManager的单例对象
     8     NSFileManager *manager = [NSFileManager defaultManager];
     9     //判断path是文件还说路径
    10     BOOL isDir;//是否为文件夹
    11     BOOL isExist = [manager fileExistsAtPath:path isDirectory:&isDir];//是否存在
    12     
    13     if (!isExist) {
    14         NSLog(@"路径下的目录或文件 不存在的");
    15     }
    16     
    17     if (isDir) {
    18         NSLog(@"是目录文件夹。");
    19         //就需要打印所有的子文件夹
    20         NSArray *dirArray = [manager contentsOfDirectoryAtPath:path error:nil];
    21         //遍历数组中所有的文件和目录
    22         for (NSString* fileName in dirArray) {
    23             NSString* fileNames = [NSString stringWithFormat:@"%@/%@",path,fileName];
    24             NSLog(@"%@",fileNames);
    25             //然后递归调用,遇到文件名就输出行数
    26             codeLine(fileNames);
    27         }
    28     }else{
    29         content = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
    30         NSArray *array = [content componentsSeparatedByString:@"
    "];
    31         //获取文件的行数
    32         NSLog(@"行数是:%lu",(unsigned long)array.count);
    33     }
    34 }
    35 
    36 int main(int argc, const char * argv[]) {
    37     @autoreleasepool {
    38         // /Users/HeYang/Desktop/HTTP
    39         NSString* path = @"/Users/HeYang/Desktop/HTTP";
    40         codeLine(path);
    41     }
    42     return 0;
    43 }

     3、然后进一步解决的问题是:文件为后缀.h .m .c的文本

     1 #import <Foundation/Foundation.h>
     2 
     3 int codeLine(NSString *path)
     4 {
     5     //需要获取的内容
     6     NSString* content;
     7     //获取NSFileManager的单例对象
     8     NSFileManager *manager = [NSFileManager defaultManager];
     9     //判断path是文件还说路径
    10     BOOL isDir;//是否为文件夹
    11     BOOL isExist = [manager fileExistsAtPath:path isDirectory:&isDir];//是否存在
    12     
    13     if (!isExist) {
    14         NSLog(@"路径下的目录或文件 不存在的");
    15         return 0;
    16     }
    17     NSArray *array;
    18     NSString *fullFileName;
    19     if (isDir) {
    20         //就需要打印所有的子文件夹
    21         NSArray *dirArray = [manager contentsOfDirectoryAtPath:path error:nil];
    22         //遍历数组中所有的文件和目录
    23         for (NSString* fileName in dirArray) {
    24             fullFileName = [NSString stringWithFormat:@"%@/%@",path,fileName];
    25             //然后递归调用,遇到文件名就输出行数
    26             codeLine(fullFileName);
    27         }
    28         return 0;
    29     }else{
    30         //还需要判断非指定文件名后缀的文件
    31         NSString *extends = [path pathExtension];
    32         if (![extends isEqualToString:@"h"]
    33             && ![extends isEqualToString:@"c"]
    34             && ![extends isEqualToString:@"m"]){
    35             return 0;
    36         }
    37         content = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
    38         array = [content componentsSeparatedByString:@"
    "];
    39     }
    40     NSLog(@"%@ 的行数是:",path);
    41     //获取文件的行数
    42     NSLog(@"行数是:%lu",(unsigned long)array.count);
    43     return 0;
    44 }
    45 
    46 int main(int argc, const char * argv[]) {
    47     @autoreleasepool {
    48         // /Users/HeYang/Desktop/HTTP
    49         NSString* path = @"/Users/HeYang/Desktop/HTTP";
    50         codeLine(path);
    51     }
    52     return 0;
    53 }
     
     
     
     
     
     
     
     
  • 相关阅读:
    记最近的玄学东西
    AGC032F One Third
    【集训队作业2018】小Z的礼物
    Codeforces 1214 F G H 补题记录
    如何使用Spark大规模并行构建索引
    一次bug死磕经历之Hbase堆内存小导致regionserver频繁挂掉
    ElasticSearch中分词器组件配置详解
    Hadoop2.7.1配置NameNode+ResourceManager高可用原理分析
    分布式日志收集之Logstash 笔记(一)
    海量可视化日志分析平台之ELK搭建
  • 原文地址:https://www.cnblogs.com/goodboy-heyang/p/4820465.html
Copyright © 2020-2023  润新知