XML -- plist
- 存储的内容是键值对
- plist 可存储的对象类型包括
NSData,
BOOL,
NSString,
NSDate,
NSArray,
NSDictionary
- 存储plist和读取
- 将对象存储至plist: 需要对象和路径,路径是完整路径,包含后缀名
- 读取,是NSString或其他可归档类的类方法,如
[NSString stringWithContentOfFile:(NSString *)path encoding...]
等等
// 将一个对象存储(归档)至指定目录
-(void)DataStorage{
//存储需要 对象及路径
NSString *str = @"Hellow";//对象
NSString *path = @"/tmp/test.plist";//完整路径,包括待创建的文件名
BOOL result = [str writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:nil];
NSLog(@"success? = %d",result);
// 读取,需要路径和编码类型,比如UTF8
NSString *getStr = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
NSLog(@"get string = %@",getStr);
}
沙盒目录结构理解
- 结构
既然沙盒就是一个文件夹,那就看看里面有什么吧。沙盒的目录结构如下:
应用程序包
Documents
Library
Caches
Preferences
tmp
- 目录特性 —— 以下的区别唯一是
path
路径的区别
虽然沙盒中有这么多文件夹,但是没有文件夹都不尽相同,都有各自的特性。所以在选择存放目录时,一定要认真选择适合的目录。- 应用程序包": 这里面存放的是应用程序的源文件,包括资源文件和可执行文件。
NSString *path = [[NSBundle mainBundle] bundlePath];
NSLog(@"%@", path);
- Documents: 最常用的目录,iTunes同步该应用时会同步此文件夹中的内容,适合存储重要数据。
NSString *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject;
NSLog(@"%@", path);
- Library/Caches: iTunes不会同步此文件夹,适合存储体积大,不需要备份的非重要数据。
NSString *path = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).firstObject;
NSLog(@"%@", path);
Library/Preferences: iTunes同步该应用时会同步此文件夹中的内容,通常保存应用的设置信息。
tmp: iTunes不会同步此文件夹,系统可能在应用没运行时就删除该目录下的文件,所以此目录适合保存应用中的一些临时文件,用完就删除。
NSString *path = NSTemporaryDirectory();
NSLog(@"%@", path);
- 最后的文件路径为
NSString *fileName = [path stringByAppendingPathComponent:@"xxx.plist"];
plist的增删改查
可以写入成plist的类如文首所写。
- 增和改用的是类似的实例化方法
// KVclass 包含NSArray,NSDictionary,NSString等
[KVclass writeToFile:plistPath atomically:YES];
- 读
NSMutableDictionary *searchdata = [[NSMutableDictionary alloc] initWithContentsOfFile:filePath];
- 改
改和增很类似。不过改的方式,是先读出对应的数据,改成NSMutableDictionary
,改动字典中的内容后,再重新用"增"的方法写进去。
//获取路径
NSString *filepath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0]stringByAppendingPathComponent:@"sandbox.plist"];
//所有的数据列表
NSMutableDictionary *datalist= [[[NSMutableDictionary alloc]initWithContentsOfFile:filepath]mutableCopy];
//获取Login节点
NSMutableDictionary *loginData = [datalist objectForKey:@"Login"];
[loginData setValue: @"FlyElephant" forKey:@"UserName"];
[loginData setValue: @"123456" forKey:@"UserPassWord"];
[datalist setValue:loginData forKey:@"Login"];
[datalist writeToFile:filepath atomically:YES];
NSLog(@"修改成功");
- 删
NSFileManager *manager=[NSFileManager defaultManager];
if ([manager removeItemAtPath:filepath error:nil]) {
NSLog(@"文件删除成功");
}
实例代码
// 写入document沙盒
NSString *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject;
NSString *fileName = [path stringByAppendingPathComponent:@"districtOutlineInfo.plist"];
self.districtNameArray = [[NSMutableArray alloc] init];
[self.districtOutlineInfoDict writeToFile:fileName atomically:YES];