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. LitePal + Gson + Volley的ORM框架尝试方案

    为了紧跟技术潮流,目前的项目开始采用ORM的思想进行重新设计. 数据库采用轻量级ORM框架LitePal,Json解析采用Gson,网络框架采用Volley. 如果只是单纯的将这些第三方框架引进来,事 ...

  2. 配置内存中OLTP文件组提高性能

    在今天的文章里,我想谈下使用内存中OLTP的内存优化文件组来获得持久性,还有如何配置它来获得高性能.在进入正题前,我想简单介绍下使用你数据库里这个特定文件组,内存OLTP是如何获得持久性的. 内存中O ...

  3. sublime 插件zen coding

    sublime的插件Zen Coding是一个编写html的神器,现在已经更名为Emmet了. 在sublime中的package需要搜索的是Emmet 相关网站: 官网 Zen Coding: 一种 ...

  4. mysql update时报错You are using safe update mode

    在使用mysql执行update的时候,如果不是用主键当where语句,会报如下错误,使用主键用于where语句中正常. ) Error Code: . You are using safe upda ...

  5. java的poi技术下载Excel模板上传Excel读取Excel中内容(SSM框架)

    使用到的jar包 JSP: client.jsp <%@ page language="java" contentType="text/html; charset= ...

  6. question about import google file

    1. question descibe; once, one css file(app.css) of my web project has sentence like this: @import u ...

  7. 【iOS】Quartz2D练习-动态改变属性值

    一.通过slider控制圆的缩放 1.实现过程 新建一个项目,新建一个继承自UIview的类,并和storyboard中自定义的view进行关联.代码示例:SLViewController.m文件 # ...

  8. ASP.NET Web API通过ActionFilter来实现缓存

    using System; using System.Collections.Generic; using System.Linq; using System.Threading; using Sys ...

  9. html alert 的三种方式

    html alert 一共有三种方式. 第一种是最简单的直接在js的函数里alert("要输出的内容"); 这种直接就是一个弹出框,显示要输出的内容. 第二种是带选择的弹出框,弹出 ...

  10. .net aes加密视频等文件

    公司学习平台在app端下载下来的视频需要加密 随查找资料参考一些写法 写了aes的加密方法 记录防止忘记 using System; using System.Collections.Generic; ...