iOS 文件操作

文件的基本操作

//NSFileManager   文件管理器类 用于操作文件或目录

        NSFileManager *file = [NSFileManager defaultManager];
        NSFileManager *file2 = [NSFileManager defaultManager];

//通过验证NSFileManager是一个单例类

       NSLog(@"file=%p,file2=%p",file,file2);

//1. 遍历文件路径: 浅度遍历、深度遍历

        //a. 浅度遍历: 只遍历当前这一层的文件夹的所有文件或目录
        NSError *error = nil;
        NSArray *arr = [file contentsOfDirectoryAtPath:PATH error:&error];
        if(error){  //判断如果error有值,则打印错误
            NSLog(@"error = %@",error);
        }else{     //没有错误,则打印获取的信息
            NSLog(@"arr = %@",arr);
        }


        //b.深度遍历:遍历当前层与当前层下的子层
        arr = [file subpathsOfDirectoryAtPath:PATH error:&error];
        if(error){
            NSLog(@"error = %@",error);
        }else{
            NSLog(@"arr = %@",arr);
        }

//2.创建文件或目录

        //a. 创建文件路径: createFileAtPath

        //判断文件是否已存在:fileExistsAtPath
        BOOL bval = [file fileExistsAtPath:CREATE_FILE];
        if(bval){ //返回值:YES  文件存在  NO  不存在
            NSLog(@"文件已存在");
        }else{
            //参数1:文件路径  参数2:内容(nil) 参数3:属性(nil)
             bval = [file createFileAtPath:CREATE_FILE contents:nil attributes:nil];
            if(bval){  //返回值: YES 成功   NO  失败
                NSLog(@"文件创建成功");
            }else{
                NSLog(@"文件创建失败");
            }
        }

//b.创建目录路径:

        bval = [file fileExistsAtPath:CREATE_PATH];
        if(bval){  //返回值:YES  目录存在  NO  不存在
            NSLog(@"目录已存在");
        }else{
            //参数1:路径 参数2:中间路径(YES) 参数3:属性(nil) 参数4:错误
            bval = [file createDirectoryAtPath:CREATE_PATH withIntermediateDirectories:YES attributes:nil error:nil];
            if(bval){
                NSLog(@"目录创建成功");
            }else{
                NSLog(@"目录创建失败");
            }
        }

//获取路径的属性

        NSDictionary *dic = [file attributesOfItemAtPath:CREATE_FILE error:nil];
        NSLog(@"dic = %@",dic);

        //NSNumber: 数字类  专门存储数字的类
        NSNumber *numA = dic[@"NSFileSize"];

        NSNumber *numB = @5;  //直接初始化数字类

        NSLog(@"fileSize = %@,numB = %@",numA,numB);

        //间接初始化数字类: 对象方法、类型方法

        //通过一个整型,初始化数字类对象方法
        NSNumber *numC = [[NSNumber alloc] initWithInt:6];
        NSLog(@"numC=%@",numC);

         //通过一个浮点型,初始化数字类类方法
        NSNumber *numD = [NSNumber numberWithFloat:4.5];
        NSLog(@"numD=%@",numD);

文件的拷贝 移动 删除

     NSFileManager *file = [NSFileManager defaultManager];

        //参数1:源路径  参数2: 目标路径  参数3:错误提示

//1. 文件或目录的拷贝:

        //拷贝时:源文件存在,目标文件不存在,才能拷贝成功
        NSError *error = nil;

        if([file fileExistsAtPath:DST_PATH])
        {
            NSLog(@"目标文件存在,无须拷贝");
        }else{

            [file copyItemAtPath:SRC_PATH toPath:DST_PATH error:&error];
            if(error){
                NSLog(@"error = %@",error);
            }else{
                NSLog(@"拷贝成功");
            }
        }

//2. 文件或目录的移动:

        //移动时:源文件存在,目标文件不存在,才能移动成功

        if([file fileExistsAtPath:SRC_PATH]&&![file fileExistsAtPath:DST_PATH])
        {
            [file moveItemAtPath:SRC_PATH toPath:DST_PATH error:&error];
            if(error){
                NSLog(@"error = %@",error);
            }else{
                NSLog(@"文件的移动成功");
            }
        }else{
            NSLog(@"不能确保源文件存在,目标文件不存在");
        }

//3. 删除

         //删除时:指定的文件存在,即可删除成功成功
        [file removeItemAtPath:DEL_PATH error:&error];
        if(error){
            NSLog(@"error=%@",error);
        }else{
            NSLog(@"删除成功");
        }
//test

        NSFileManager *file = [NSFileManager defaultManager];

        NSArray *array = [file contentsOfDirectoryAtPath:PATH error:nil];
        NSLog(@"array = %@",array);

        for (NSString *obj in array) {
            //if([obj hasSuffix:@"png"])

            //[obj pathExtension]:  求文件扩展名
            if([[obj pathExtension] isEqualToString:@"png"])
            {
                //stringByAppendingPathComponent:字符串文件路径的拼接
                NSString *path = [PATH stringByAppendingPathComponent:obj];

                if([file removeItemAtPath:path error:nil])
                {
                    NSLog(@"%@删除成功",obj);
                }
            }
        }

文件的读写

    //NSFileHandle 文件句柄类,用于操作文件内容(读/写)

        //fileHandleForReadingAtPath:  以只读方式获取句柄对象
        //fileHandleForWritingAtPath:  以只写方式获取句柄对象
        //fileHandleForUpdatingAtPath: 以读写方式获取句柄对象(推荐)
        //获取文件句柄的对象
        NSFileHandle *handle = [NSFileHandle fileHandleForUpdatingAtPath:FILE_P];

        if(handle){  //如果获取句柄对象有值,则可进行读写文件

//-------读--------

            //读取指定长度的内容,存储到NSData: readDataOfLength

            //默认情况下,读取文件的指定位置从起始位置开始

            //设置偏移位置; 默认位置为0
            [handle seekToFileOffset:3];

            //偏移到文件末尾
            //[handle seekToEndOfFile];

            //NSData: 二进制数据流类(非文本文件必须用NSData,如视图流。。)
            NSData *data = [handle readDataOfLength:5];

            //从指定位置读取文件内容,一直到末尾:readDataToEndOfFile
            NSData *data2 = [handle readDataToEndOfFile];

            //NSData转NSString
            NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
            NSLog(@"str = %@",str);

            NSString *str2 = [[NSString alloc] initWithData:data2 encoding:NSUTF8StringEncoding];
            NSLog(@"str2 = %@",str2);


//--------------写-------------

            NSString *str3 = @"hello_1605";

            //NSString转NSData
            NSData *data3 = [str3 dataUsingEncoding:NSUTF8StringEncoding];

            //将游标偏移位置起始位置
            [handle seekToFileOffset:0];

            [handle writeData:data3];  //将数据流写入文件中
        }

//文本文件的读写操作

        //参数1:路径 参数2:编码  参数3: 错误

        //---读取文件---
        NSString *str = [NSString stringWithContentsOfFile:PATH encoding:NSUTF8StringEncoding error:nil];

        NSLog(@"str = %@",str);

        //-----写入文件------
        NSString *str2 = @"hello world!";

        //字符串写入后,替换原先文件中的内容
        if([str2 writeToFile:PATH atomically:YES])
        {
            NSLog(@"文件写入成功");
        }

test

    NSFileManager *file = [NSFileManager defaultManager];

//1. 创建目录

        if([file fileExistsAtPath:DIR_PATH])
        {
            NSLog(@"该目录已存在");
        }else{

            BOOL bval =[file createDirectoryAtPath:DIR_PATH withIntermediateDirectories:YES attributes:nil error:nil];
            if(bval){
                NSLog(@"目录创建成功");
            }else{
                NSLog(@"目录创建失败");
                return 0;
            }
        }

//2. 将字符串写入到目录所在的文件中

        NSString *str = @"I am a handsome man";

        if([str writeToFile:FILE_PATH atomically:YES])
        {
            NSLog(@"文件写入成功");
        }else{
            NSLog(@"文件创建失败");
        }

//3. 读取文件中的内容

        NSFileHandle *handle = [NSFileHandle fileHandleForUpdatingAtPath:FILE_PATH];
        if(handle){
            //偏移7个字符串长度
            [handle seekToFileOffset:7];
            NSData *data = [handle readDataToEndOfFile];
            NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
            NSLog(@"str = %@",str);
        }

plist文件操作

    //plist:
        //1. 以列表的方式存储数据的文件
        //2. 文件只能以数组或字典的类型进行存储
        //3. 用字典的方式写入,则用字典的方式读
           //用数组的方式写入,则用数组的方式读

//-------plist文件的写入-------

//1. 手动写入(新建文件-resource-property List-新建plist文件)

        //写入时按字典类型写入,按字典类型进行接收

        //---按字典方式读取----
        //dictionaryWithContentsOfFile: 以字典方式读取plist文件的方法
        NSDictionary *dic = [NSDictionary dictionaryWithContentsOfFile:PATH];
        NSLog(@"dic = %@",dic);

//2. 代码写入

        NSNumber *numA = @333;
        NSArray *array = @[@"111",@"222",numA];

        //writeToFile: 字典数组都用该方法写入数据到plist文件
        if([array writeToFile:PLIST atomically:YES])
        {
            NSLog(@"写入成功");
        }else{
            NSLog(@"写入失败");
        }

//---按数组方式读取----

        //arrayWithContentsOfFile: 以数组方式读取plist文件的方法
        NSArray *array2 = [NSArray arrayWithContentsOfFile:PLIST];
        NSLog(@"array = %@",array2);

总结

     //1.单例
            //a.概念:在程序的执行过程中,只初始化一次
            //b.作用:节约内存; 共享内存,方便传值
        //2.NSFileManage--文件管理器类--操作文件或目录
            //常用方法:
            //a. 遍历: 深度/浅度遍历
            //b. 创建文件/目录、 文件是否存在,获取属性
            //c. 拷贝/移动/删除文件或目录
        //3.NSfileHandle --文件句柄类--操作文件内容
            //a.主要操作文件的读和写
            //b.读写过程如何偏移
            //c.NSData类与NSString间的转换
        //4. 文本文件的读写操作
            //a.直接通过字符串进行读写
            //b.读取时只能读整体数据,写入时会覆盖文件的原始内容
        //4.plist
        //a. 以列表的方式存储数据的文件
        //b. 文件只能以数组或字典的类型进行存储
        //c. 用字典的方式写入,则用字典的方式读
           //用数组的方式写入,则用数组的方式读

如果这篇文章对你有帮助,记得点赞哦~O(∩_∩)O哈!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值