1.数据持久化:就是数据的永久存储
2.数据持久化的本质:数据保存成文件,存储到程序中的沙盒中
那么沙盒构成部分是哪些呢???以下是它的构成部分:
Document 存储用户数据,需要备份的信息
Library/Caches 存储缓存文件,程序专用的支持文件
Library/Preference 存储应用程序的偏好设置文件
.app 程序包
tmp 存储临时文件
每个应用程序位于文件系统的严格限制部分
每个程序只能在为该程序创建的文件系统中读取
每个程序在iOS系统内都放在了统一的文件目录下
沙盒的本质就是一个文件夹,名字随机分配的,按照UUID标示符标记分配
4.获取沙盒目录路径的方法
NSHomeDirectory 沙盒主路径
NSDocumentDirectory Documents文件夹
NSLibraryDirectory Library文件夹
NSCachesDirectory Caches文件夹
NSTemporaryDirectory temp文件夹
5.获取沙盒文件的路径
这里的NSLog是可以在控制台输出路径
在桌面应用程序中找到Finder 右击鼠标按钮,找到前往文件夹
沙盒所存在的位置
#pragma mark ------获取沙盒中子文件路径的方式1---拼接路径
//获取Document文件夹路径
NSString *document = [homePath stringByAppendingPathComponent:@"/Documents"];
NSLog(@"文件路径 = %@",document);
//获取Library文件夹路径
NSString *library = [homePath stringByAppendingPathComponent:@"/Library"];
NSLog(@"%@",library);
#pragma mark ------获取沙盒中子文件路径的方式2---通过函数获取
//获取Document文件夹路径
NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSLog(@"documentPath = %@",documentPath);
//获取Library文件夹路径
NSString *libraryPath = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) lastObject];
NSLog(@"libraryPath = %@",libraryPath);
//获取caches路径
NSString *cachesPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)lastObject];
NSLog(@"cachesPath = %@",cachesPath);
//获取tmp路径
NSString *tmpPath = NSTemporaryDirectory();
NSLog(@"tmpPath = %@",tmpPath);
//应用程序路径
NSString *path = [[NSBundle mainBundle] resourcePath];
NSLog(@"%@",path);
简单文件的写入 与 读取
#pragma mark-----字符串对象的写入 和 读取
//第一步,创建字符串对象
NSString *poem =@"《相思》\n红豆生南国,\n春来发几枝。\n愿君多采撷,\n此物最相思。";
//第二步,写入文件构造字符串文件存储路径 创建txt文件
在这里需要注意的一点是被创建的文件,它的后缀要与文件应显示的格式后缀保持一致,不然里面的内容会为空(例如:@"/text.txt")
NSString *strPath = [documentPathstringByAppendingPathComponent:@"/text.txt"];
//第三步:将文件写入指定路径
[poem writeToFile:strPathatomically:YESencoding:NSUTF8StringEncodingerror:nil];
NSLog(@"strPath = %@",strPath);
//第四步:读取txt
NSString *readText = [NSStringstringWithContentsOfFile:strPath encoding:NSUTF8StringEncodingerror:nil];
NSLog(@"readText = %@",readText);
#pragma mark-------数组对象的写入 和 读取
//写入
//第一步:构造一个数组对象
NSMutableArray *strArray = [NSMutableArrayarrayWithObjects:@"练晓俊",@"郭亚茹",@"马娟娟",@"韩苇棋",nil];
//第二步:构造数组存储路径,创建plist文件
NSString *arrayPath = [documentPathstringByAppendingPathComponent:@"/array.plist"];
//第三步:将数组写入 plist
[strArray writeToFile:arrayPath atomically:YES];
NSLog(@"arrayPath = %@",arrayPath);
//数组中添加新元素
[strArray addObject:@"闫卫敏"];
[strArray writeToFile:arrayPath atomically:YES];
//读取
NSArray *readArray = [NSArrayarrayWithContentsOfFile:arrayPath];
NSLog(@"%@",readArray);
#pragma mark------字典对象的写入 和 读取
//写入
//第一步:构造一个字典
NSDictionary *dic = @{@"name":@"韩苇棋",@"age":@"22",@"sex":@"女",@"hobby":@[@"听歌",@"看综艺节目",@"看动漫"]};
//第二步:构造存储字典的plist文件的存储路径
NSString *dicPath = [documentPathstringByAppendingPathComponent:@"dic.plist"];
//第三步:将字典写入plist中
[dic writeToFile:dicPath atomically:YES];
NSLog(@"dic = %@",dicPath);
//第四步:读取
NSDictionary *readDic = [NSDictionarydictionaryWithContentsOfFile:dicPath];
NSLog(@"%@",readDic);
#pragma mark------NSData对象的写入 和 读取
//第一步:创建图片
UIImage *image = [UIImageimageNamed:@"head_19.jpg"];
//第二步:将图片转换成二进制
NSData *imageData = UIImageJPEGRepresentation(image, 0.5);
//第三步:构造NSData文件.da的存储路径
NSString *imagePath = [documentPathstringByAppendingPathComponent:@"/data.da"];
//第四步:将图片写入data.da文件中
[imageData writeToFile:imagePath atomically:YES];
NSLog(@"image = %@",imagePath);
//第五步:读取
UIImage *readImage = [UIImageimageWithContentsOfFile:imagePath];
NSLog(@"%@",readImage);
根据构造出的路径我们通过查找就可以在文件内看到生成的相应文件: