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. 后端码农谈前端(HTML篇)第二课:常见元素

    一.根元素 <doctype> 定义文档类型. <html> 定义 HTML 文档. 二.元数据元素 <head> 定义关于文档的信息. <meta> ...

  2. Deep Learning 在中文分词和词性标注任务中的应用

    开源软件包 SENNA 和 word2vec 中都用到了词向量(distributed word representation),当时我就在想,对于我们的中文,是不是也类似地有字向量(distribu ...

  3. LeetCode——Jump Game

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

  4. 3D拓扑自动布局之Node.js篇

    上篇将3D弹力布局的算法运行在Web Workers后台,这篇我们将进一步折腾,将算法运行到真正的后台:Node.js,事先申明Node.js篇和Web Workers篇一样,在这个应用场景下并不能提 ...

  5. Struts 2 拦截器

    什么是Struts 2 拦截器  拦截器就是当用户请求后台Action类时在Action的Excute()方法执行前和Result返回魔板试图之后(将页面(数据)发送给浏览器渲染之前)所需要的一些通用 ...

  6. Scrum 3.1 多鱼点餐系统开发进度(第三阶段项目构思与任务规划)

    Scrum 3.1 多鱼点餐系统开发进度(第三阶段项目构思与任务规划) 1.团队名称:重案组 2.团队目标:长期经营,积累客户充分准备,伺机而行 3.团队口号:矢志不渝,追求完美 4.团队选题:餐厅到 ...

  7. win 10 远程连接出现 "由于安全设置错误, 客户端无法连接到远程计算机. 确定你已登录到网络后.” 错误

    win 10 远程连接出现 "由于安全设置错误, 客户端无法连接到远程计算机. 确定你已登录到网络后.” 错误 解决方法如下: Step 1:打开"本地安全策略"- Wi ...

  8. URL 字符编码

    URL 编码会将字符转换为可通过因特网传输的格式. URL - 统一资源定位器 Web 浏览器通过 URL 从 web 服务器请求页面. URL 是网页的地址,比如http://www.cnblogs ...

  9. knockoutjs+jquery.gridgroup 实现table数据加载和行合并

    目标 使用ajax获取到json数据后,通过ko绑定到表格,然后通过jquery.gridgroup插件实现行合并,效果如下: 步骤 1.引入插件 <script src="~/Scr ...

  10. sencha 报错问题汇总

    store的url必填 否则报错:Uncaught TypeError: Cannot read property 'indexOf' of undefined ext-all.js store必须在 ...