-(void)dealloc{
[super dealloc];
}
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
self.navigationController.navigationBar.translucent = NO;
[self getDocumentsPath];
[self writeString];
[self writeArray];
[self writeDic];
[self writeToString];
[self writeData];
[self userDefaultsWrite];
[self archiveObject];
[self unarchiveObject];
}
- (void)getDocumentsPath{
//获取沙盒路径
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSLog(@"1===%@",paths);
}
#pragma mark 字符串的写入和读取
//字符串的写入和读取
- (void)writeString{
//获取文件地址
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
//获取第一个字符串
NSString *string = [paths objectAtIndex:0];
//创建存储字符串的路径
string = [NSString stringWithFormat:@"%@%@",string,@"/text.txt"];
NSError *error = nil;
NSString *value = @"范总擦黑板";
//写入到文件中
[value writeToFile:string atomically:YES encoding:NSUTF8StringEncoding error:&error];
if (error) {
NSLog(@"error == %@",error);
}
//字符串的读取
NSString *read = [[NSString alloc]initWithContentsOfFile:string encoding:NSUTF8StringEncoding error:&error];
NSString *read1 = [NSString stringWithContentsOfFile:string encoding:NSUTF8StringEncoding error:&error];
NSLog(@"%@",read1);
NSLog(@"读取字符串 :%@",read);
[read release];
}
#pragma mark 数组的写入和读取
//数组的写入和读取
- (void)writeArray{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *string = [paths objectAtIndex:0];
//创建存储数组的路径
string = [NSString stringWithFormat:@"%@%@",string,@"/arr.txt"];
//定义一个数组
NSArray *array = [NSArray arrayWithObjects:@"KJJ",@"PYT", nil];
//写入数组
[array writeToFile:string atomically:YES ];
//读取
NSArray *read = [[NSArray alloc]initWithContentsOfFile:string];
NSLog(@"读取数组 :%@",read);
[read release];
}
#pragma mark 字典的写入和读取
//字典的写入和读取
- (void)writeDic {
//获取文件地址
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
//获取第一个字符串
NSString *string = [paths firstObject];
//创建存储字符串的路径
string = [NSString stringWithFormat:@"%@%@",string,@"/dic.txt"];
//定义一个字典
NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:@"A",@"a",@"B",@"b"
, nil];
[dic writeToFile:string atomically:YES];
//
NSDictionary *read = [[NSDictionary alloc]initWithContentsOfFile:string];
NSLog(@"读取字典 :%@",read);
[read release];
}
- (void)writeToString{
//先读取 在拼接 然后重新写入
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *string = [paths firstObject];
string = [NSString stringWithFormat:@"%@/text.txt",string];
NSString *write = @"搜噶";
[write writeToFile:string atomically:YES encoding:NSUTF8StringEncoding error:nil];
NSLog(@"%@",string);
}
//二进制对象的写入
- (void)writeData {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *string = [paths firstObject];
string = [NSString stringWithFormat:@"%@%@",string,@"/data"];
//将字符串转换为utf8类型的二进制编码格式
NSString *value = @"o ha yo gu za yi ma si";
//只有这一种方法
NSData *data = [value dataUsingEncoding:NSUTF8StringEncoding];
[data writeToFile:string atomically:YES];
NSLog(@"%@",data);
//读取
NSData *read = [NSData dataWithContentsOfFile:string];
//只有这一种方法
NSString *read1 = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"%@",read);
NSLog(@"%@",read1);
}
- (void)userDefaultsWrite{
//轻量级存储 存储一些和登陆信息有关的 存储方式和字典一样
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:@"不得不爱" forKey:@"name"];
//同步存储
[defaults synchronize];
}
- (void)readUserDefaults{
NSString *value = [[NSUserDefaults standardUserDefaults]objectForKey:@"name"];
NSLog(@"%@",value);
}
//复杂类型的对象存储 针对自己创建的类和对象 model
//归档 即将自己创建的model类对象转换为二进制格式 通过二进制格式进行存储
- (void)archiveObject{
Student *student = [[Student alloc]init];
student.name = @"金在中";
student.sex = @"男";
student.age = 20;
//NSArray *array = [NSArray arrayWithObjects:student, nil];
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:student];
//写入
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *string = [paths firstObject];
string = [NSString stringWithFormat:@"%@/model",string];
[data writeToFile:string atomically:YES];
}
//解档 将归档后的二进制文件解档为相对应的model类型对象
- (void)unarchiveObject{
NSArray *paths = NSSearchPathForDirectoriesInDomains( NSDocumentDirectory, NSUserDomainMask, YES);
NSString *string = [paths firstObject];
string = [NSString stringWithFormat:@"%@/model",string];
NSData *data = [NSData dataWithContentsOfFile:string];
Student *model = [NSKeyedUnarchiver unarchiveObjectWithData:data];
NSLog(@"%@,%@,%d",model.name,model.sex,model.age);
}
本地存储之归档与解档
//归档协议 序列化协议
- (void)encodeWithCoder:(NSCoder *)aCoder{
[aCoder encodeObject:self.name forKey:@"name"];
[aCoder encodeObject:self.sex forKey:@"sex"];
NSNumber *num = [NSNumber numberWithInt:self.age];//装换类型
[aCoder encodeObject:num forKey:@"age"];
}
//解档,反序列化
- (id)initWithCoder:(NSCoder *)aDecoder{
if (self = [super init]) {
self.name = [aDecoder decodeObjectForKey:@"name"];//decode 反编码
self.sex = [aDecoder decodeObjectForKey:@"sex"];
NSNumber *num = [aDecoder decodeObjectForKey:@"age"];
self.age = [num intValue];
}
return self;
}