向文件中写入数据读取数据的几种方式

来源:互联网 发布:登录别人淘宝有提示吗 编辑:程序博客网 时间:2024/05/17 23:38

   

// ========================WriteToFile方法=========================  

//    写入数据

    //1.获取文件的存储路径

    //用这种方法获取路径  即便以后官方将Document文件夹的名称改变了  还是可以通过此方法获取原Document文件夹的路径

    NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectoryNSUserDomainMaskYESlastObject];

    //2. 拼接文件的路径

    //拼接一个data.plist文件 用来存储数据

    NSString *filePath = [path stringByAppendingPathComponent:@"data.plist"];

    

    //2. 需要存储的数据

    NSArray *namesArray = @[@"亚洲国际舞王尼古拉斯赵四",@"隔壁老王",@"小明"];

 

    //3.   writeToFile  根据路径 存数据

    [namesArray writeToFile:filePath atomically:YES];

//-----------------------读取数据--------------------

//    1. 获取路径

 NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,                         NSUserDomainMask, YES) lastObject];

 NSString *filePath = [path stringByAppendingPathComponent:@"data.plist"];

 //2. 根据路径获取数据

    NSArray *namesArray = [NSArray arrayWithContentsOfFile:filePath];

 

//========================NSUserDefaults方法==================

    

//------------------------------写入数据----------------------------

    //1.获取对象

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

    //2.存数据

    [defaults setObject:@"小明" forKey:@"name"];

    [defaults setInteger:100 forKey:@"age"];

    [defaults setBool:YES forKey:@"isTrue"];

    //3. 非常重要立即同步(如果不同步会丢失数据)

    [defaults synchronize];

//------------------------------读取数据----------------------------

    //1.获取偏好设置的对象

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

    //2.获取数据

    NSString *name = [defaults objectForKey:@"name"];

    NSInteger age = [defaults integerForKey:@"age"];

    BOOL  isTrue = [defaults boolForKey:@"isTrue"];

//========================归档方法==================

    //归档方法存储数据是用来存储对象的

// ----------------------归档方法存储数据数据-------------------

    //1.获取路径

NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];

 NSString *filePath = [path stringByAppendingPathComponent:@"data.plist"];

    //2. 创建需要存储的对象

    CZPerson *p = [[CZPerson alloc]init];

    p.name = @"张三";

    p.age = 101;

    p.isTrue = NO;

    //3. 通过归档的方式 存对象(archiveRootObject)

    // 如果用归档存储对象 必须遵守NSCoding

    //存数据时  必须实现 encodeWithCoder 方法

    [NSKeyedArchiver archiveRootObject:p toFile:filePath];

// ~~~~~~~~~~~~~~~~~~~~~encodeWithCoder方法~~~~~~~~~~~~~~

//    此方法是告诉 系统 我想存储 对象的 哪些属性

    - (void)encodeWithCoder:(NSCoder *)aCoder

    {

        [aCoder encodeObject:self.name forKey:@"name"];

        [aCoder encodeInteger:self.age forKey:@"age"];

        [aCoder encodeBool:self.isTrue forKey:@"isTrue"];

    }



// ----------------------归档方法读取数据-------------------

    

    //1. 获取 反归档的路径

  NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];

  NSString *filePath = [path stringByAppendingPathComponent:@"data.plist"];

    //2.接收数据

    // 必须实现 initWithCoder方法   initWithCoder也是NSCoding的方法

    CZPerson *p  = [NSKeyedUnarchiver  unarchiveObjectWithFile:filePath];

// ~~~~~~~~~~~~~~~~~~~~~~~~encodeWithCoder方法~~~~~~~~~~~~~~~~~

    //此方法 是告诉系统  你取对象的时候  取对象的哪些属性

    - (instancetype)initWithCoder:(NSCoder *)aDecoder

    {

        if (self = [super init]) {

            self.name =  [aDecoder decodeObjectForKey:@"name"];

            self.age = [aDecoder decodeIntegerForKey:@"age"];

            self.isTrue = [aDecoder decodeBoolForKey:@"isTrue"];

        }

        return self;

    }


    


2 0
原创粉丝点击