数据持久化
来源:互联网 发布:紫峰秒杀软件 编辑:程序博客网 时间:2024/06/06 07:33
程序运行会分配一个沙盒文件,沙盒文件的文件名每次运行都会变化,文件夹名只一次有效,沙盒一般会保存程序一些信息,缓存等数据,还可以进行病毒的测试. 沙盒里有三个文件夹 Documents,libary,tmp. Documents文件夹:保存用户想要保存的一些信息,比如收藏的内容,设置信息. Library文件夹:用来保存开发人员存储的一些东西. caches缓存文件夹:用来对缓存信息进行存储,清除缓存就是删除该文件夹. Preferences用来保存一些信息,NSUserDefaults创建的plist文件保存在这个文件里. tmp临时文件夹:存储临时文件. NSBundle指的是当前工程的文件夹,在里面和可以获取图片等的信息,应用程序会在编译的时候把文件变成只读文件,存入到NSBundle里.
一.把简单的对象存入本地.// 简单对象指:NSString,NSArray....ViewController.m- (void)viewDidLoad {1.把字符串写入到本地.NSString *str = @"想象一下,在一个装满了平整细沙的盒子里,我们可以尽情随意地在上面作画、涂写,无论画的好坏,最后轻轻一抹,沙盒又回到了原来的平整状态.沙盒的魅力就在于他允许你出错,还可以给你改正的机会.";// ①.先找到目标文件夹的路径Documents// 参数1:前往指定文件夹的名,NSDocumentDirectory是documents用的,64行,注意不要和63行混用.还可以指定缓存等文件夹// 参数2:文件夹的类型,用户类型// 参数3:YES是绝对路径,能找到整个路径,NO是相对路径,只保留了前往的文件夹的名,前面用~代替.NSArray *sandBox = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);// NSLog(@"%@", sandBox);// ②.寻找路径.NSString *sandBoxPath = sandBox[0];// 把要保存的内容进行路径的拼接NSString *docPath = [sandBoxPath stringByAppendingString:@"/老毛.plist"];// 把字符串写入到本地.// 参数1:写入的文件路径.// 参数2:是否保护正在写入的文件.// 参数3:编码格式.[str writeToFile:docPath atomically:YES encoding:NSUTF8StringEncoding error:nil];NSLog(@"%@", docPath); // 从本地读字符串. NSString *str = [NSString stringWithContentsOfFile:docPath encoding:NSUTF8StringEncoding error:nil];
2.把数组对象写入到本地. NSArray *arr = @[@"小黑", @"小红", @"小白", @"小黄"]; NSArray *sandBox = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *sandBoxPath = sandBox[0]; // 路径拼接. NSString *arrPath = [sandBoxPath stringByAppendingPathComponent:@"小韩.plist"]; // 按照指定的文件路径,数据写入到本地. [arr writeToFile:arrPath atomically:YES]; NSLog(@"%@", arrPath); // 从本地把数据读出来. NSArray *receiveArr = [NSArray arrayWithContentsOfFile:arrPath]; for (NSString *str in receiveArr) { NSLog(@"%@", str); } 1.指定文件保存的沙盒文件路径. 2.拼接要保存的文件路径. 3.根据路径,把数据写入. 4.按照文件路径,从本地在读取数据.
3.把字典写入到本地. NSDictionary *dic = @{@"1":@"2", @"3":@"4", @"5":@"6"}; NSArray *sandBox = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *sandBoxPath = sandBox[0]; NSString *dicPath = [sandBoxPath stringByAppendingPathComponent:@"kaka.MP4"]; [dic writeToFile:dicPath atomically:YES]; NSLog(@"%@", dicPath); NSDictionary *receiveDic = [NSDictionary dictionaryWithContentsOfFile:dicPath]; NSLog(@"%@", receiveDic); NSUserDefaults *user = [NSUserDefaults standardUserDefaults]; [user setObject:@"xiaohan" forKey:@"userName"]; NSLog(@"%@", NSHomeDirectory());}
Student.h#import <Foundation/Foundation.h>// 让复杂类写入到本地执行归档和反归档的操作,只有类签订NSCoding协议之后,实现协议方法才能进行归档和反归档的操作.@interface Student : NSObject<NSCopying>@property(nonatomic, copy)NSString *name;@property(nonatomic, copy)NSString *hobby;@property(nonatomic, assign)NSInteger age;@property(nonatomic, retain)NSNumber *number;- (instancetype)initWithName:(NSString *)name hobby:(NSString *)hobby age:(NSInteger)age number:(NSNumber *)number;@end
Student.m#import "Student.h"@implementation Student- (instancetype)initWithName:(NSString *)name hobby:(NSString *)hobby age:(NSInteger)age number:(NSNumber *)number { self = [super init]; if (self) { self.age = age; self.name = name; self.hobby = hobby; self.number = number; } return self;}- (void)encodeWithCoder:(NSCoder *)aCoder { // 对数据进行编码操作 // 把需要归档的数据进行编码操作.不需要的就不写了. [aCoder encodeObject:self.name forKey:@"name"]; [aCoder encodeObject:self.hobby forKey:@"hobby"]; [aCoder encodeObject:self.number forKey:@"number"]; [aCoder encodeInteger:self.age forKey:@"age"];}- (id)initWithCoder:(NSCoder *)aDecoder { self = [super init]; if (self) { // 解码的操作 // 把解码之后的值在赋值给属性. self.name = [aDecoder decodeObjectForKey:@"name"]; self.hobby = [aDecoder decodeObjectForKey:@"hobby"]; self.number = [aDecoder decodeObjectForKey:@"number"]; self.age = [aDecoder decodeIntegerForKey:@"age"]; } return self; }@end
4.把复杂对象,写入到本地. Student *stu = [[Student alloc] init]; stu.name = @"小黑"; stu.hobby = @"小红"; stu.number = @100; stu.age = 30; // 归档操作. // 找沙盒路径. NSArray *sandBox = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *sandBoxPath = sandBox[0]; NSString *docPath = [sandBoxPath stringByAppendingPathComponent:@"小黄.MP4"]; NSLog(@"%@",docPath); [NSKeyedArchiver archiveRootObject:stu toFile:docPath]; // 反归档. Student *tempStu = [NSKeyedUnarchiver unarchiveObjectWithFile:docPath]; NSLog(@"%@, %@", tempStu.name, tempStu.hobby);// 把复杂对象放到数组里进行归档和反归档的操作 Student *stu1 = [[Student alloc] initWithName:@"小红" hobby:@"男" age:20 number:@100]; Student *stu2 = [[Student alloc] initWithName:@"小黄" hobby:@"女" age:21 number:@200]; Student *stu3 = [[Student alloc] initWithName:@"小白" hobby:@"女" age:22 number:@300]; Student *stu4 = [[Student alloc] initWithName:@"小黑" hobby:@"男" age:23 number:@400]; NSArray *arr = @[stu1, stu2, stu3, stu4]; for (Student *aaa in arr) { NSLog(@"%@, %@, %ld, %@", aaa.name, aaa.hobby, aaa.age, aaa.number); } // 把复杂对象保存到数组中,然后整体进行归档和反归档的操作 // NSArray因为本身就签署了NSCoding协议,所以可以直接进行归档和反归档操作,自己写的复杂类也必须签NSCoding协议,实现方法,否则就会崩溃.
将plist文件,进行归档与反归档. // 1.找路径 NSArray *sandBox1 = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *sandBoxPath1 = sandBox1[0]; // 2.拼接路径. NSString *docPath1 = [sandBoxPath1 stringByAppendingPathComponent:@"student.plist"]; // 3.归档或者是写入. [NSKeyedArchiver archiveRootObject:arr toFile:docPath1]; NSLog(@"%@", docPath1); // 反归档. NSArray *temp = [NSKeyedUnarchiver unarchiveObjectWithFile:docPath]; for (Student *stu in temp) { NSLog(@"%@", stu.name); }
5.文件管理 // 1.找到文件路径 NSArray *sandBox2 = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *sandBoxPath2 = sandBox2[0]; // 创建一个文件管理者. NSFileManager *manager = [NSFileManager defaultManager]; // 要拼接一个文件夹的路径. NSString *docPath2 = [sandBoxPath2 stringByAppendingPathComponent:@"ything"]; // 根据路径创建一个文件夹. [manager createDirectoryAtPath:docPath2 withIntermediateDirectories:YES attributes:nil error:nil]; NSLog(@"********%@", docPath2);
6.删除文件夹,文件. BOOL result = [manager removeItemAtPath:docPath2 error:nil]; if (result) { NSLog(@"删除成功"); } else { NSLog(@"删除失败"); }
0 0
- 什么是数据持久化?
- 数据持久化
- 数据持久化
- 什么是数据持久化
- 数据持久化
- 数据持久化
- redis数据持久化
- Android 数据持久化
- 数据持久化
- 数据持久化
- JForum数据持久化
- IOS 数据持久化
- 浅谈数据持久化
- 浅谈数据持久化
- Android 数据持久化
- iOS 数据持久化
- 数据持久化
- ios数据持久化
- Visual SourceSafe基本操作
- hive配置元数据库为postgresql小结
- JS模块化工具requirejs教程(二):基本知识
- 5-2 然后是几点
- HDU1039 Easier Done Than Said?(java)
- 数据持久化
- 支持向量机通俗导论(理解SVM的三层境界)
- Stackoverflow上人气最旺的10个Java问题
- oracle11g dataguard中standby库文件坏块的修复过程
- [121]Best Time to Buy and Sell Stock
- 5-3 逆序的三位数
- SCSI_PASS_THROUGH结构的说明
- Servlet 学习笔记一
- 冒泡排序算法详解C++程序