当前位置: 移动技术网 > IT编程>移动开发>IOS > iOS 文件操作

iOS 文件操作

2018年03月01日  | 移动技术网IT编程  | 我要评论

玛丽莲梦露怎么死的,星吧网,神的诅咒

文件的基本操作

//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哈!

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

  • ios uicollectionview实现横向滚动

    现在使用卡片效果的app很多,之前公司让实现一种卡片效果,就写了一篇关于实现卡片的文章。文章最后附有demo实现上我选择了使用uicollectionview ... [阅读全文]
  • iOS UICollectionView实现横向滑动

    本文实例为大家分享了ios uicollectionview实现横向滑动的具体代码,供大家参考,具体内容如下uicollectionview的横向滚动,目前我使... [阅读全文]
  • iOS13适配深色模式(Dark Mode)的实现

    iOS13适配深色模式(Dark Mode)的实现

    好像大概也许是一年前, mac os系统发布了深色模式外观, 看着挺刺激, 时至今日用着也还挺爽的终于, 随着iphone11等新手机的发售, ios 13系统... [阅读全文]
  • ios 使用xcode11 新建项目工程的步骤详解

    ios 使用xcode11 新建项目工程的步骤详解

    xcode11新建项目工程,新增了scenedelegate这个类,转而将原appdelegate负责的对ui生命周期的处理担子接了过来。故此可以理解为:ios... [阅读全文]
  • iOS实现转盘效果

    本文实例为大家分享了ios实现转盘效果的具体代码,供大家参考,具体内容如下demo下载地址: ios转盘效果功能:实现了常用的ios转盘效果,轮盘抽奖效果的实现... [阅读全文]
  • iOS开发实现转盘功能

    本文实例为大家分享了ios实现转盘功能的具体代码,供大家参考,具体内容如下今天给同学们讲解一下一个转盘选号的功能,直接上代码直接看viewcontroller#... [阅读全文]
  • iOS实现轮盘动态效果

    本文实例为大家分享了ios实现轮盘动态效果的具体代码,供大家参考,具体内容如下一个常用的绘图,主要用来打分之类的动画,效果如下。主要是ios的绘图和动画,本来想... [阅读全文]
  • iOS实现九宫格连线手势解锁

    本文实例为大家分享了ios实现九宫格连线手势解锁的具体代码,供大家参考,具体内容如下demo下载地址:效果图:核心代码://// clockview.m// 手... [阅读全文]
  • iOS实现卡片堆叠效果

    本文实例为大家分享了ios实现卡片堆叠效果的具体代码,供大家参考,具体内容如下如图,这就是最终效果。去年安卓5.0发布的时候,当我看到安卓全新的material... [阅读全文]
  • iOS利用余弦函数实现卡片浏览工具

    iOS利用余弦函数实现卡片浏览工具

    本文实例为大家分享了ios利用余弦函数实现卡片浏览工具的具体代码,供大家参考,具体内容如下一、实现效果通过拖拽屏幕实现卡片移动,左右两侧的卡片随着拖动变小,中间... [阅读全文]
验证码:
移动技术网