数据持久化:把闪存上的数据,以文件的形式保存下来。
数据持久化可分为:
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];
与查找Library和docments一样查找NSCachesDirectory
写入读取文件:
字典、数组都有读取写入文件的方法
docments目录:
1、NSString *path = [NSHomeDirectory() stringByAppendingString:@"/Documents"];
2、 NSString *path2 = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
3、NSArray *pathList = NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory, NSUserDomainMask, YES);
NSString *path3 = [pathList lastObject];
与查找Library和docments一样查找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];
// 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 library)2、bundle 在运行的时候 只能读数据 写不进去数据
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]
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]