黑马程序员 OC语言 - 8 NSFileManager、NSSet、NSMutableSet

来源:互联网 发布:淘宝店招是什么 编辑:程序博客网 时间:2024/05/16 11:04

若排版有错误,请查看PDF版:http://pan.baidu.com/s/1nt7JHNV



一、 NSFileManager

1.      实例

计算文件的代码行数

 

1)   path : 文件的全路径(可能是文件夹、也可能是文件)

2)   返回值 int :代码行数

3)   考察NSString、NSArray的使用

4)   NSFileManager

 

#import <Foundation/Foundation.h>

 

NSUIntegercodeLineCount(NSString *path)

{

    // 1、获得文件管理者

    NSFileManager *mgr = [NSFileManagerdefaultManager];

   

    // 2、测试传入的路径是否存在,是否为文件夹

    BOOL isDir;

    BOOL isExist = [mgrfileExistsAtPath:path isDirectory:&isDir];//若文件存在:isExist=YES,若文件不存在:isExist=NO若是文件夹:isDir=YES;若不是文件夹:isDir=NO

   

    // 3、如果不存在,直接返回0

    if(!isExist)

    {

        NSLog(@"文件路径不存在!!!!!!");

        return 0;

    }

   

    // 代码能来到着,说明路径存在

 

    if (isDir) // 是文件夹

    {

        // 获得当前文件夹path下面的所有内容(文件夹、文件)

        NSArray *array = [mgrcontentsOfDirectoryAtPath:path error:nil];

       

        // 定义一个变量保存path中所有文件的总行数

        int count = 0;

       

        // 遍历数组中的所有子文件(夹)名

        for (NSString *filenamein array)

        {

            // 获得子文件(夹)的全路径

            NSString *fullPath = [NSStringstringWithFormat:@"%@/%@", path, filename];

           

            // 累加每个子路径的总行数

            count += codeLineCount(fullPath);

        }

       

        return count;

    }

    else//是文件

    {

        // 判断文件的拓展名(忽略大小写)

        NSString *extension = [[pathpathExtension] lowercaseString];

        if (![extensionisEqualToString:@"h"]

            && ![extension isEqualToString:@"m"]

            && ![extensionisEqualToString:@"c"])//文件拓展名不是h,不是m,也不是c

        {

            return 0;

        }

       

        // 加载文件内容

        NSString *content = [NSStringstringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];

       

        // 将文件内容切割为每一行

        NSArray *array = [contentcomponentsSeparatedByString:@"\n"];//"\n"来分割字符串,并存储到数组中

       

        // 删掉文件路径前面的/Users/Mac/Desktop/OC

        NSRange range = [path rangeOfString:@"/Users/Mac/Desktop/OC"];

        NSString *str = [pathstringByReplacingCharactersInRange:range withString:@""];

       

        // 打印文件路径和行数

        NSLog(@"%@ - %ld", str, array.count);

       

        return array.count;

    }

}

 

int main()

{

    NSUInteger count = codeLineCount(@"/Users/Mac/Desktop/OC");

    NSLog(@"%ld", count);

    return 0;

}

 

二、 NSSet、NSMutableSet

1.      NSSet和NSArray对比

1)     相同点

a)      都是集合,都能存放多个OC对象

b)     只能存放OC对象,不能存放非OC对象类型(基本数据类型:int、char、float等)

c)      本身都不可变,都有一个可变的子类

2)     不同点

NSArray有顺序,NSSet没有顺序

 

2.      NSMutableSet

NSMutableSet *s = [NSMutableSet set];

// 添加元素

[s addObject:@"hack"];

// 删除元素

[sremoveObject:@"hack"];

 

3.      NSSet的基本使用

NSSet *s = [NSSet set];

NSSet *s2 = [NSSet setWithObjects:@"jack",@"rose",@"jack2",@"jack3",nil];   

// 随机拿出一个元素

NSString *str =  [s2 anyObject];

 


0 0