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

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

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

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

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

 2、然后进一步考虑一个目录下的所有文件以及目录下的子文件的行数
思路:<1>这样的话,首先要处理 path 可以是文件所在目录,也可以是文件夹所在的目录。所以就需要NSFileManager对象来处理文件和文件夹。
  NSFileManager可以判断当前目录是对应的文件还是文件夹。
<2>当如果是文件的话,就执行上面的程序,输出文件的行数。
<3>当如果是文件夹的话,就需要继续执行方法<1>所以这里就需要用递归来处理这种需要重复执行包含的内容。
下面就直接给出MJ的代码:
 #import <Foundation/Foundation.h>

 void codeLine(NSString *path)
{
//需要获取的内容
NSString* content;
//获取NSFileManager的单例对象
NSFileManager *manager = [NSFileManager defaultManager];
//判断path是文件还说路径
BOOL isDir;//是否为文件夹
BOOL isExist = [manager fileExistsAtPath:path isDirectory:&isDir];//是否存在 if (!isExist) {
NSLog(@"路径下的目录或文件 不存在的");
} if (isDir) {
NSLog(@"是目录文件夹。");
//就需要打印所有的子文件夹
NSArray *dirArray = [manager contentsOfDirectoryAtPath:path error:nil];
//遍历数组中所有的文件和目录
for (NSString* fileName in dirArray) {
NSString* fileNames = [NSString stringWithFormat:@"%@/%@",path,fileName];
NSLog(@"%@",fileNames);
//然后递归调用,遇到文件名就输出行数
codeLine(fileNames);
}
}else{
content = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
NSArray *array = [content componentsSeparatedByString:@"\n"];
//获取文件的行数
NSLog(@"行数是:%lu",(unsigned long)array.count);
}
} int main(int argc, const char * argv[]) {
@autoreleasepool {
// /Users/HeYang/Desktop/HTTP
NSString* path = @"/Users/HeYang/Desktop/HTTP";
codeLine(path);
}
return ;
}

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

 #import <Foundation/Foundation.h>

 int codeLine(NSString *path)
{
//需要获取的内容
NSString* content;
//获取NSFileManager的单例对象
NSFileManager *manager = [NSFileManager defaultManager];
//判断path是文件还说路径
BOOL isDir;//是否为文件夹
BOOL isExist = [manager fileExistsAtPath:path isDirectory:&isDir];//是否存在 if (!isExist) {
NSLog(@"路径下的目录或文件 不存在的");
return ;
}
NSArray *array;
NSString *fullFileName;
if (isDir) {
//就需要打印所有的子文件夹
NSArray *dirArray = [manager contentsOfDirectoryAtPath:path error:nil];
//遍历数组中所有的文件和目录
for (NSString* fileName in dirArray) {
fullFileName = [NSString stringWithFormat:@"%@/%@",path,fileName];
//然后递归调用,遇到文件名就输出行数
codeLine(fullFileName);
}
return ;
}else{
//还需要判断非指定文件名后缀的文件
NSString *extends = [path pathExtension];
if (![extends isEqualToString:@"h"]
&& ![extends isEqualToString:@"c"]
&& ![extends isEqualToString:@"m"]){
return ;
}
content = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
array = [content componentsSeparatedByString:@"\n"];
}
NSLog(@"%@ 的行数是:",path);
//获取文件的行数
NSLog(@"行数是:%lu",(unsigned long)array.count);
return ;
} int main(int argc, const char * argv[]) {
@autoreleasepool {
// /Users/HeYang/Desktop/HTTP
NSString* path = @"/Users/HeYang/Desktop/HTTP";
codeLine(path);
}
return ;
}
 
 
 
 
 
 
 
 

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

  1. Win7系统用户文件夹多出一个Administrator.xxx开头的文件怎么解决

    一般情况下,Win7操作系统都会有一个Administrator用户文件夹,但最近有用户发现自己win7系统电脑中用户文件夹有两个Administrator文件夹,另一个是以Administrator ...

  2. Python获取当前脚本文件夹(Script)的绝对路径

    Python获取当前脚本绝对路径 Python脚本有一个毛病,当使用相对路径时,被另一个不同目录下的py文件中导入时,会报找不到对应文件的问题.感觉是当前工作目录变成了导入py文件当前目录.如果你有配 ...

  3. 【转载】C#指定文件夹下面的所有内容复制到目标文件夹下面

    在涉及到文件夹操作的过程中,有时候需要将文件夹下的所有内容复制拷贝到另一个文件夹,在C#的开发中有时候会遇到这个功能需求将指定文件夹下所有的内容复制到另一个文件夹,这个过程需要遍历所有的文件和目录.此 ...

  4. apache环境下禁止某文件夹内运行PHP脚本、禁止访问文件或目录执行权限的设置方法

    apache环境下禁止某文件夹内运行PHP脚本.禁止访问文件或目录执行权限的设置方法   首先我们来看两段对上传目录设置无权限的列子,配置如下: <Directory "要去掉PHP执 ...

  5. Java扫描指定文件路径下的文件并且递归扫描其子目录下的所有文件

    本文主要实现了扫描指定文件路径下的文件,递归扫描其子目录下的所有文件信息,示例文件为: 要求将后缀为.dat的文件夹信息也写入到数据库中,然后将.chk文件解析,将文件中对应的内容读出来写入到数据库, ...

  6. Path,Files巩固,题目:从键盘接收两个文件夹路径,把其中一个文件夹中(包含内容)拷贝到另一个文件夹中

    这个题目用传统的File,InputStream可以做,但是如果用Files,Path类做,虽然思路上会困难一些,但是代码简洁了很多,以下是代码: import java.io.IOException ...

  7. [R语言]读取文件夹下所有子文件夹中的excel文件,并根据分类合并。

    解决的问题:需要读取某个大文件夹下所有子文件夹中的excel文件,并汇总,汇总文件中需要包含的2部分的信息:1.该条数据来源于哪个子文件夹:2.该条数据来源于哪个excel文件.最终,按照子文件夹单独 ...

  8. C#压缩文件夹至zip,不包含所选文件夹【转+修改】

    转自园友:jimcsharp的博文C#实现Zip压缩解压实例[转] 在此基础上,对其中的压缩文件夹方法略作修正,并增加是否对父文件夹进行压缩的方法.(因为笔者有只压缩文件夹下的所有文件,却不想将选中的 ...

  9. C#TreeView控件遍历文件夹下所有子文件夹以及文件

    一直对递归的理解不深刻,有时候觉得很简单,可是用起来总会出错.这里需要在TreeView控件里显示一个文件夹下的所有目录以及文件,毫无意外的需要用到递归. 一开始,想到用递归写一个生成每一个节点(Tr ...

随机推荐

  1. LeetCode-95. Unique Binary Search Trees II

    Description: Given n, generate all structurally unique BST's (binary search trees) that store values ...

  2. LeetCode——Jump Game II

    Description: Given an array of non-negative integers, you are initially positioned at the first inde ...

  3. Android 简单计算器源码....

    PS:今天算是闲着没事做了一个小型的计算器...顺便熟悉一下Android的布局,组件,以及时间监听的方法...就当是做了一个小小的练习吧...     顺便去对比了一下别人写的代码...有的使用到了 ...

  4. python编码问题的最终分析

    python初学者,往往因为字符编码的问题而苦恼不已,本人也是阅读了大量的博客,再进行了一定的测试,基本搞清楚了编码问题的前因后果.下面一段代码是在python3.5上的,以它为例进行讲解(请忽略糟糕 ...

  5. Entity FrameWork 延迟加载本质(二)

    1.对于外键实体而言,EF会在用到这个外键属性的时候,才会去查对应的表.这就是按需加载了... 2.按需加载的缺点:每次调用外键实体的时候,都会去查询数据库(EF有小优化:相同的外键实体只查一次) I ...

  6. 后缀数组 --- WOj 1564 Problem 1564 - A - Circle

    Problem 1564 - A - Circle Problem's Link:   http://acm.whu.edu.cn/land/problem/detail?problem_id=156 ...

  7. 关于Chrome Dev Tool

    ★注意点一:函数名,方法名要拼写准确;

  8. 菜鸟成长进阶之——fiddler使用总结

     作为一个猪拱性能的程序猿,不会使用fiddler来协助自己分析问题是万万不能的.还记得刚入职的时候老大提过的几个必须要熟练使用的工具中第一个就是fiddler.虽然接触了快一年了,但是还是一知半解的 ...

  9. 【AngularJS学习笔记】00 序

    AngularJS通过新的属性与表达式来扩展HTML,有一种很形象的叫法,定义它为声明式语言. 为克服HTML在构建应用上的不足而设计! 这是它的目标. 它的官网进不去,应该是被墙了,这是goegle ...

  10. 10个出色的NoSQL数据库

    http://www.infoq.com/research/nosql-databases?utm_source=infoqresearch&utm_campaign=lr-homepage ...