数据持久化

数据持久化:把闪存上的数据,以文件的形式保存下来。
数据持久化可分为:
1、plist
2、NSUserDefaults
3、归档 NSCoding
4、sqlite 数据库
5、coreData

路径:文件存储的位置

沙盒机制又叫bandBox。在iOS的应用程序里面,每个应用程序读、写入本应用程序的沙盒目录。
沙盒路径是根目录

沙盒目录的组成:
1、Documents:尽量不要放隐私的文件,这个目录可以开放读取、写入的权限,里面的所有文件都可以导出或者拖出去。在info.plist文件中添加Application supports iTunes file sharing这个键值是YES就可以分享document目录
2、Library:存放配置信息或者数据库资源文件
3、tmp:是一个临时文件存放的地方,隔一段时间就会清除一次(可以设置)不能存放重要的文件(数据库)
Bundele目录:应用程序右键显示包内容的目录,应用程序在运行的时候,不允许写任何数据。

查找各个路径的方式:
1、bundle目录:[NSBundle mainBundle];
2、tmp:NSTemporaryDirectory( )
3、Library:①②
①找到根目录,拼接到 Library目录
根目录:NSHomeDirectory( )
拼接的方法:
1、通过拼接字符串拼接路径
NSString *path = [NSHomeDirectory( ) stringByAppendingString:@ ”/ Library " ];
2、专门用于拼接路径的方式
NSString *path = [ NSHomeDirectory( ) stringByAppendingPathComponent: @ Library " ];
路径是以 / 区分的
如果用拼接字符串的方法拼接路径必须要用 ”/ "
如果拼接路径的方式,在路径的后面加上一个路径,就不能加 ”/ "
②通过查找的方式
1、先找到某一个路径的数组(Library document ) 
获得数组第一个或者最后一个元素,就是查找目录
 NSArray *pathList = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
      NSString *path3 = [pathList lastObject];
Domains(范围内) 查找某个路径
 NSSearchPathForDirectoriesInDomains(要查找的路径, 要搜索的区域范围 NSUserDomainMask, 是不是允许获得扩展的目录 YES)

记:查找目录会得到一个数组,虽然是查找,但首单词一定是NS Search
     查找的路径, 要搜索的区域范围 NSUserDomainMask, 是不是允许获得扩展的目录 YES)

查找docments
 docments
目录:
 1
NSString *path = [NSHomeDirectory() stringByAppendingString:@"/Documents"];
 2
NSString *path2 = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
 3
NSArray *pathList = NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory, NSUserDomainMask, YES);
 NSString *path3 = [pathList lastObject];
 
与查找Librarydocments一样查找NSCachesDirectory
 
 
写入读取文件:
 
字典、数组都有读取写入文件的方法
 1、写入plist文件里面

  写入文件内容
//    NSArray
//    读取文件的方法
//    arrayWithContentsOfFile:(NSString *)path
  
//    initWithContentsOfFile:(NSString *)path
   
//    写入文件的方法
//    - (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile
   
 
//    字典读取文件的方法  NSDictionary
//    字典写入- (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile
//    字典读取的方法
//+ (nullable NSDictionary<KeyType, ObjectType> *)dictionaryWithContentsOfFile:(NSString *)path
//    - (nullable NSDictionary<KeyType, ObjectType> *)initWithContentsOfFile:(NSString *)path
   
 
/*
    NSString *path = [[NSBundle mainBundle] pathForResource:@"pp" ofType:@"plist"];
    NSArray *content = [NSArray arrayWithContentsOfFile:path];
//   
拷贝读取出来的数据,目的是在原来的基础之上添加数据
    NSMutableArray *copyList = [content mutableCopy];
    [copyList addObject:@"312"];
//   
在某个路径写入数据
//    atomically:
如果设置成YES,不会直接写入到指定文件,先写入到一个临时文件,暂存,当写入完毕,才存入到指定文件。如果遇到断电、闪退、来电话...就会删除临时文件,不会写入到指定文件,防止写入数据不完整,在使用的时候出现崩溃
//   
如果设置成NO,不管任何情况都会写入。
  BOOL isSuccess = [copyList writeToFile:path atomically:YES];
    NSLog(@"%d",isSuccess);
   */

/*
//   
docments存文件
//    1
、找到指定目录
    NSArray *list = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *path = [[list lastObject] stringByAppendingPathComponent:@"userInfo.plist"];
    NSLog(@"%@",path);
//   2
、准备要写入的数据
    NSDictionary *info = @{@"
姓名":@"肖耐",@"性别":@"1",@"年龄":@"22",@"身高":@"180",@"体重":@"180"};
//    3
、开始写入
    BOOL isSuccess = [info writeToFile:path atomically:YES];
    NSLog(@"%d",isSuccess);
    */

   
//  NSString写入的方法
//    - (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile encoding:(NSStringEncoding)enc error:(NSError **)error
//    读取
//    - (nullable instancetype)initWithContentsOfFile:(NSString *)path encoding:(NSStringEncoding)enc error:(NSError **)error
  
//    + (nullable instancetype)stringWithContentsOfFile:(NSString *)path encoding:(NSStringEncoding)enc error:(NSError **)error
   
//   找到路径
//   NSLibraryDirectory 查找哪一个路径
   
NSArray *pathList = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
   
NSString *path = [[pathList lastObject] stringByAppendingPathComponent:@"312.txt"];
//    准备要写入的数据
   
NSString *content = @"前言:不经一番寒彻骨,怎得梅花扑鼻香";
//    写入数据
   
NSError *error;
   
BOOL isSuccess = [content writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:&error];
   
if (isSuccess) {
        
NSLog(@"%@",path);
    }
//   读取数据
//    NSString *string = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
   
NSString *string = [[NSString alloc] initWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
    NSLog(@"%@",string);

总结

 1、两个目录:1、沙盒 (有三个文件夹 docments tmp library2bundle 在运行的时候 只能读数据 写不进去数据
 2
、读取路径方式
 bundle
目录:[NSBundle mainBundle]
 
根目录:NSHomeDirectory()
 tmp:NSTemporaryDirectory()
 
 1
、查找路径数组
 NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES)
 2
、找到指定路径
 
取第一个或最后一个元素
 Documents:NSDocumentDirectory
 library:NSLibraryDirectory
 Caches:NSCachesDirectory
 
 
读写文件
 
数组 字典 字符串
 write
 ContentsOfFile
 
 [
数组对象 writeToFile:path atomically:YES]
 [
字典对象 writeToFile:path atomically:YES]
 [
字符串对象 writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:nil]
 
 [NSArray arrayWithContentsOfFile:path]
 [NSDictionary dictionaryWithContentsOfFile:path]
 [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil]
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值