数据持久化就是数据的永久存储,不会随程序退出而消失.它一般存储在沙盒中
读取沙盒中文件路径的方法 如下:
/**
* documents路径
* 该文件一般存储用户的一些数据
*/
NSArray *documentsPathArr = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *document = documentsPathArr[0];
NSLog(@"%@", document);
// 缓存文件夹路径
// 该文件夹 一般存储 缓存文件
NSArray *caches = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
// 打印tmp文件夹
// 存储临时文件
NSString *tmp = NSTemporaryDirectory();
// 打印沙盒的主目录路径
NSString *homePath = NSHomeDirectory();
存储数据:
// 数据持久化 (存储)
// 简单对象写入文件
// 注意:如果要存入数组或者字典, 那么数组或字典中存储的必须是简单对象,无法存入复杂对象
- (void)writeFile
{
// 简单对象:字符串,字典,数组,data...系统写好的
// 复杂对象:自定义的类,比如:Person类
NSString *str = @"是醉生梦死,是怀恋她,是看不透的他! 远在天边又近在眼前啊,那朵邻水照影的花";
// 写入文件路径,比如在 document是路径下写入xiaoshuo.txt文件
NSArray *documentsPathArr = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentPath = documentsPathArr[0];
// 拼接要写入文件的路径
NSString *path = [NSString stringWithFormat:@"%@/xiaoshuo.txt", documentPath];
NSLog(@"%@", path);
/**
* 简单对象写入步骤
1.拼接写入的路径 (路径一定要拼接正确)
2.调用写入的方法
*/
// 写文件
// atomically 如果YES ,在写入过程中出现程序崩溃时,不影响写入
[str writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:nil];
// 写入一个数组
NSString *path1 = [NSString stringWithFormat:@"%@/shuzu.plist", documentPath];
NSLog(@"____%@", path1);
NSArray *array = @[@"欧阳锋", @"洪七公", @"黄药师", @"一灯大师"];
[array writeToFile:path1 atomically:YES];
// 写入一个字典
NSString *path2 = [NSString stringWithFormat:@"%@/zidian.plist", documentPath];
NSDictionary *dic = @{@"key1":@"我", @"key2":@"你"};
NSLog(@"%@", path2);
[dic writeToFile:path2 atomically:YES];
// NSData的写入, 后缀.da
NSString *path3 = [NSString stringWithFormat:@"%@/data.da",documentPath];
NSLog(@"+_+_+_+_+%@", path3);
NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];
[data writeToFile:path3 atomically:YES];
}
读取数据:
// 读取写入的文件
- (void)readingFile
{
/**
* 步骤
1.获取路径
* 2.从路径当中读取文件
*/
// NSString *str = @"是醉生梦死,是怀恋她,是看不透的他! 远在天边又近在眼前啊,那朵邻水照影的花";
// 写入文件路径,比如在 document是路径下写入xiaoshuo.txt文件
NSArray *documentsPathArr = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentPath = documentsPathArr[0];
// 拼接要写入文件的路径
NSString *path = [NSString stringWithFormat:@"%@/xiaoshuo.txt", documentPath];
NSString *str = [[NSString alloc] initWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
NSLog(@"%@", str);
[str release];
// 读数组
NSString *path1 = [NSString stringWithFormat:@"%@/shuzu.plist", documentPath];
NSArray *arr = [NSArray arrayWithContentsOfFile:path1];
NSLog(@"%@", arr);
// 读取字典数据
NSString *path2 = [NSString stringWithFormat:@"%@/zidian.plist", documentPath];
NSDictionary *dic = [NSDictionary dictionaryWithContentsOfFile:path2];
NSLog(@"%@", dic);
// 读取data
NSString *path3 = [NSString stringWithFormat:@"%@/data.da",documentPath];
NSData *data = [NSData dataWithContentsOfFile:path3];
NSString *string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"%@",string);
[string release];
}