iOS初级数据持久化 沙盒机制 归档与反归档
数据持久化就是数据保存成文件,存储到程序中的沙盒中.
沙盒构成
Document 存储用户数据,需要备份的信息
Caches 缓存文件,
程序专用的支持文件
Temp 临时文件
通过代码查找程序沙盒的相对路径
*documentsPathArry NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask,
YES);
*document = [documentsPathArry
lastObject];
NSLog(@"%@",
document);
缓存文件夹路径
NSArray
*cachesPatharray =
NSSearchPathForDirectoriesInDomains(NSCachesDirectory,
NSUserDomainMask,
YES);
NSString
*cachespath = cachesPatharray[0];
NSLog(@"%@",
cachespath);
//
打印temp文件夹
//
该文件夹一般存储
临时文件夹
NSString
*tempPath =
NSTemporaryDirectory();
NSLog(@"%@",
tempPath);
打印沙盒主目录路径 NSHomeDirectory()
NSString
*homePath =
NSHomeDirectory();
NSLog(@"%@",
homePath);
简单对象写入文件
//
注意
:如果你写入字典或者数组
那么数组字典中存储的数据必须是简单对象
无法写入复杂对象
- (void)writeFile
{
//
简单对象
//
字符串
字典
数组
data...系统写好的类
//
写入文件的路径
//
写入documents
路径下写入xiaoshuo.text
NSArray
*documentsArray =
NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask,
YES);
NSString
*document = documentsArray[0];
NSString
*path = [document
stringByAppendingString:@"/xiaoshuo.text"];
NSString
*str =
@"第一章
在一个月黑风高的早上";
// atomically
如果yes
在你写入的过程中出现程序崩溃
不影响写入
[str
writeToFile:path
atomically:YES
encoding:NSUTF8StringEncoding
error:nil];
NSLog(@"%@",
path);
//
简单拼接对象写入步骤
// 1.拼接要写入的路径
(注意的路径一定要拼接对)
// 2.
调用写方法完事
//
写入一个数组
shuzu.plist
//
必须给后缀类型
你不给呢
就默认是text格式
NSString
*arrPath = [document
stringByAppendingPathComponent:@"shuzu.plist"];
NSArray
*array =
@[@"永乐",
@"永飞",
@"哈哈"];
//
调用写入方法
[array
writeToFile:arrPath
atomically:YES];
NSLog(@"%@",
arrPath);
//
写入一个字典
zidian.plist
NSString
*dicPath = [document
stringByAppendingPathComponent:@"zidian.plist"];
NSDictionary
*dic =
@{@"name":
@"xiaofang"};
[dic
writeToFile:dicPath
atomically:YES];
NSLog(@"%@",
dicPath);
// data的写入
后缀.da
NSString
*dataPath = [document
stringByAppendingPathComponent:@"data.da"];
NSString
*dataStr =
@"你猜我是谁";
NSData
*data = [dataStr
dataUsingEncoding:NSUTF8StringEncoding];
//
写入文件
[data
writeToFile:dataPath
atomically:YES];
NSLog(@"%@",
dataPath);
//
复杂对象
//
自定义的类
比如person
}
//
读取写入的文件
- (void)readingFile
{
//
读字符串
//
获取路径
NSArray
*documentsArray =
NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask,
YES);
NSString
*document = documentsArray[0];
NSString
*path = [document
stringByAppendingString:@"/xiaoshuo.text"];
//
从路径中读取字符串
NSString
*str = [[NSString
alloc]
initWithContentsOfFile:path
encoding:NSUTF8StringEncoding
error:nil];
NSLog(@"%@",
str);
//
读取数组的文件
NSString
*arrPath = [document
stringByAppendingPathComponent:@"shuzu.plist"];
//
获取路径
NSArray
*array = [NSArray
arrayWithContentsOfFile:arrPath];
NSLog(@"%@",
array);
//
读取字典
//
获取路径
NSString
*dicPath = [document
stringByAppendingPathComponent:@"zidian.plist"];
NSDictionary
*dic = [NSDictionary
dictionaryWithContentsOfFile:dicPath];
NSLog(@"%@",
dic);
//
读取data
NSString
*dataPath = [document
stringByAppendingPathComponent:@"data.da"];
NSData
*data = [NSData
dataWithContentsOfFile:dataPath];
//
将data转化为字符串
NSString
*dataStr = [[NSString
alloc]
initWithData:data
encoding:NSUTF8StringEncoding];
NSLog(@"%@",
dataStr);
复杂对象归档与反归档
对复杂对象进行持久化
叫做归档与反归档
(编码与解码)
创建一个model类
.
NSFileManager文件管理者
这个类
是个单例类
用来对文件夹进行操作
创建一个文件夹
- (void)createFile
{
//
需求 在documents下创建一个Download文件夹
NSArray
*documentsArr = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask,
YES);
NSString
*doucumentPath = documentsArr[];
//
拼接路径
NSString
*downloadPath = [doucumentPath
stringByAppendingPathComponent:@"Download"];
NSLog(@"%@", downloadPath);
//
创建文件夹
//
文件管理者 这个类
是个单例类
用来对文件夹进行操作
NSFileManager
*manager = [NSFileManager
defaultManager];
// withIntermediateDirectories
//
如果yes情况下
要创建的文件
存在的话 可以对其覆盖
//
反之 文件存在的话
不能对其覆盖
(创建失败)
BOOL
isCreatFile = [manager createDirectoryAtPath:downloadPath
withIntermediateDirectories:YES
attributes:nil
error:nil];
NSLog(@"%d", isCreatFile);
}
// 宏定义
#define kDocumentPath [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]
#define kCachesPath [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject]
//
移动文件夹
- (void)moveFile
{
//
获取原来的路径
NSString
*oldPath = [kDocumentPath
stringByAppendingPathComponent:@"Download"];
//
获取新路径 libray
下的Caches
文件夹
NSString
*newPath = [kCachesPath
stringByAppendingPathComponent:@"Download"];
//
创建 文件管理者类的对象(单例对象)
NSFileManager
*manager = [NSFileManager
defaultManager];
//
移动文件夹
BOOL
isMoved = [manager moveItemAtPath:oldPath
toPath:newPath
error:nil];
NSLog(@"%d", isMoved);
}
//
复制文件夹
- (void)copyFile
{
// libaray
下的Caches
文件夹 download
复制到document文件夹下
NSString
*oldPath = [kCachesPath
stringByAppendingPathComponent:@"download"];
NSString
*newPath = [kDocumentPath
stringByAppendingPathComponent:@"downLoad"];
//
创建文件管理对象
NSFileManager
*manager = [NSFileManager
defaultManager];
//
复制
BOOL
isCopy = [manager copyItemAtPath:oldPath
toPath:newPath
error:nil];
NSLog(@"%d", isCopy);
}
//
删除文件夹
- (void)deleteFile
{
//
获取要删除的路径
NSString
*deletePath = [kDocumentPath
stringByAppendingPathComponent:@"Download"];
//
创建文件管理对象
NSFileManager
*manager = [NSFileManager
defaultManager];
BOOL
isDelete = [manager removeItemAtPath:deletePath
error:nil];
NSLog(@"%d", isDelete);
}
//
判断文件夹是否存在
- (void)isExistFile
{
//
获取 要判断的路径
NSString
*path = [kCachesPath
stringByAppendingPathComponent:@"download"];
//
创建文件管理对象
NSFileManager
*manager = [NSFileManager
defaultManager];
BOOL
isExist = [manager isExecutableFileAtPath:path];
NSLog(@"%d", isExist);
}
//
复杂对象归档
- (void)archiver
{
//
初始化对象
JJModel
*model = [[JJModel
alloc]
init];
//
赋值对象
model.name
= @"MJJ";
model.age
= ;
//
图片
//
把一个png格式转化成data
model.data
= UIImagePNGRepresentation([UIImage
imageNamed:@"IMG_1873"]);
NSMutableData
*data = [NSMutableData
data];
//
创建一个归档对象
NSKeyedArchiver
*archiver = [[NSKeyedArchiver
alloc]
initForWritingWithMutableData:data];
//
进行归档编码
[archiver encodeObject:model
forKey:@"JJModel"];
//
编码完成
[archiver finishEncoding];
//
实际上归档 相当于把编码完的对象保存data中
// NSLog(@"---------%@", data);
//
把存有复杂对象的文件data
写入文件中 进行持久化
//
搞路径
NSString
*dataPath = [kDocumentPath
stringByAppendingPathComponent:@"JJmodel.da"];
// NSLog(@"=======%@", dataPath);
//
调入写入方法
[data writeToFile:dataPath
atomically:YES];
//
释放归档对象
[archiver release];
反归档
(解码的过程)
- (void)unArchiver
{
//
搞路径
NSString
*path = [kDocumentPath
stringByAppendingPathComponent:@"JJModel.da"];
//
获取刚才归档的data
NSData
*data = [NSData
dataWithContentsOfFile:path];
//
创建 反归档对象
NSKeyedUnarchiver
*unArchiver = [[NSKeyedUnarchiver
alloc]
initForReadingWithData:data];
//
解码 返回一个对象
应该是JJModel
//
这个key
一定要和刚才归档的时候的key一致
JJModel
*model = [unArchiver decodeObjectForKey:@"JJModel"];
//
反归档完成
[unArchiver finishDecoding];
//
释放反归档对象
[unArchiver release];
NSLog(@"%@", model);
UIImage
*image = [UIImage
imageWithData:model.data];
版权声明:本文为博主原创文章,未经博主允许不得转载。
iOS初级数据持久化 沙盒机制 归档与反归档的更多相关文章
- IOS中的沙盒机制
IOS中的沙盒机制(SandBox)是一种安全体系,它规定了应用程序只能在为该应用创建的文件夹内读取文件,不可以访问其他地方的内容.所有的非代码文件都保存在这个地方,比如图片.声音.属性列表和文本文件 ...
- IOS 沙盒机制 浅析
IOS中的沙盒机制(SandBox)是一种安全体系,它规定了应用程序只能在为该应用创建的文件夹内读取文件,不可以访问其他地方的内容.所有的非代码文件都保存在这个地方,比如图片.声音.属性列表和文本文件 ...
- 【iOS知识学习】_iOS沙盒机制
IOS中的沙盒机制(SandBox)是一种安全体系,它规定了应用程序仅仅能在为该应用创建的目录内读取文件,不能够訪问其它地方的内容.全部的非代码文件都保存在这个地方.比方图片.声音.属性列表和文本文件 ...
- iOS沙盒机制介绍
一.沙盒机制 沙盒的概念:沙盒是每一个iOS应用程序都会自动创建的一个文件系统目录(文件夹),而且沙盒还具有独立.封闭.安全的特点. 沙盒机制 iOS中的沙盒不仅仅是一个文件目录,TA其实更是一种安全 ...
- iOS 阶段学习第25天笔记(iOS沙盒机制介绍)
iOS学习(OC语言)知识点整理 一.iOS沙盒机制介绍 1)概念: 每个ios应用都有自己的应用沙盒,应用沙盒就是文件系统目录,与其他应用放入文件 系统隔离,ios系统不允许访问 其他应用的应用沙盒 ...
- iOS沙盒机制介绍,Block 的介绍
一.iOS沙盒机制介绍 (转载) 1)概念:每个ios应用都有自己的应用沙盒,应用沙盒就是文件系统目录,与其他应用放入文件 系统隔离,ios系统不允许访问 其他应用的应用沙盒,但在ios8中已经开放访 ...
- IOS 学习之 iOS沙盒(sandbox) 介绍 沙盒机制 文件操作(一)
1.iOS沙盒机制 iOS应用程序只能在为该改程序创建的文件系统中读取文件,不可以去其它地方访问,此区域被成为沙盒,所以所有的非代码文件都要保存在此,例如图像,图标,声音,映像,属性列表,文本文件等. ...
- iOS-数据持久化基础-沙盒机制
沙盒详解 1.IOS沙盒机制 IOS应用程序只能在为该改程序创建的文件系统中读取文件,不可以去其它地方访问,此区域被成为沙盒,所以所有的非代码文件都要保存在此,例如图像,图标,声音,映像,属性列表,文 ...
- iOS之沙盒机制和如何获取沙盒路径
iOS APP可以在自己的沙盒里读写文件,但是,不可以访问其他APP的沙盒.每一个APP都是一个信息孤岛,相互是不可以进行通信的,唯独可以通过URL Scheme.沙盒里面的文件可以是照片.声音文件. ...
随机推荐
- 【BZOJ】3038: 上帝造题的七分钟2(线段树+暴力)
http://www.lydsy.com:808/JudgeOnline/problem.php?id=3038 这题我就有得吐槽了,先是线段树更新写错,然后不知哪没pushup导致te,精度问题sq ...
- 【BZOJ】1041: [HAOI2008]圆上的整点(几何)
http://www.lydsy.com:808/JudgeOnline/problem.php?id=1041 所谓的神题,我不会,直接题解..看了半天看懂题解了.详见hzwer博客 这题呢,我只能 ...
- 最大权闭合图 && 【BZOJ】1497: [NOI2006]最大获利
http://www.lydsy.com/JudgeOnline/problem.php?id=1497 最大权闭合图详细请看胡伯涛论文<最小割模型在信息学竞赛中的应用>,我在这里截图它的 ...
- Struts2 中result type属性说明
Struts2 中result type属性说明 首先看一下在struts-default.xml中对于result-type的定义: <result-types><result-t ...
- hdu 3348 coins
这道题算是一道很经典的题,很好的诠释了贪心和动态规划的不同功能.求最少钱的数量用贪心就够了,但是求最多钱的数量要用到动态规划的思想,每步都尽量保留最大 数量.具体看程序注解: #include&quo ...
- 我对Java的java.lang.Class这个类的深入理解
类是对同一类事物的描述,字段具体的值只有到类实例化时才会指定,静态字段除外.所有的类也是同一类事物,用Class这个类来描述.Class类与String.Person等类是同一个级别的.java的字节 ...
- 在archlinux上搭建twitter storm cluster
本文详细描述如何在archlinux上搭建twitter storm cluster,转载请注明出处,谢谢. 有关archlinux基本系统安装,请参照archlinux简明安装指南一文,下面以上述为 ...
- Nginx/LVS/HAProxy负载均衡软件的优缺点详解
PS:Nginx/LVS/HAProxy是目前使用最广泛的三种负载均衡软件,本人都在多个项目中实施过,参考了一些资料,结合自己的一些使用经验,总结一下. 一般对负载均衡的使用是随着网站规模的提升根据不 ...
- 第十一章、认识与学习BASH
第十一章.认识与学习 BASH 最近升级日期:2009/08/25 1. 认识 BASH 这个 Shell 1.1 硬件.核心与 Shell 1.2 为何要学文字接口的 shell 1.3 系统的合法 ...
- Bootstrap页面布局11 - BS表单
表单之 文本框 text <input type='text' value='' placeholder='输入您的用户名' class='input-mini' /> ①几个类控制文本框 ...