# iOS—数据处理:文件读写
数据处理之文件读写
沙盒机制(SandBox)
- 沙盒:每一个iOS应用都会为自己创建一个文件系统目录(文件夹),这个独立、封闭、安全的控件,叫做沙盒。
- iOS中的沙盒机制(SandBox)
- 沙盒是一种安全体制
- 它规定了应用程序只能在为该·## 应用程序创建的文件夹(沙盒)内防问文件,不可以访问其它沙盒内的内容(iOS8 已经部分开发访问)
- 所有的非法代码文件都保持在这个地方,比如图片文件文本等等。
- 沙盒机制的特点
1.每个## 应用程序的活动范围都限定在自己的沙盒里
2.不能随意跨越自己的沙盒去访问别的应用程序的沙盒中的内容(iOS8已经部分开放)
3.应用程序向外请求或者接受数据都需要经过权限认证
## 应用程序的沙盒目录下的文件夹
应用程序的沙盒目录下会有三个文件夹Documents、Library(下面有Caches和Preferences目录)、tmp。
- Documents: 保存应用运行时生成的需要持久化的数据,iTunes会自动备份该目录
- 苹果建议将程序中建立的或在程序中浏览到的文件数据保存在该目录下,iTunes备份和恢复的时候回包括此目录
- Library: 存储程序的默认设置和其它状态信息
1.Library/Caches: 存放缓存文件,iTunes不会备份此目录,此目录下文件不会再应该退出删除。一般存放体积比较大,不是特别只要的资源。
2..Library/Preferences:保存应用的所有偏好设置,iOS的Setting(设置)应该会在目录中查找应用的设置信息,iTunes会自动备份该目录。注意:您不应该直接创建偏好设置文件,而是应该使用NSUserDefaults类来取得和设置## 应用程序的偏好 - tmp: 保存应用运行时所需的临时数据,使用完毕后在将相应的文件从该目录删除。应该没有运行时,系统也有可能会清除该目录下的文件,iTunes不会同步该目录。iPhone重启时,该目录下的文件会被删除。
获取沙盒路径
//沙盒路径
-(void)sandBoxPaths{
//沙盒主路径
NSString* homePathString = NSHomeDirectory();
NSLog(@"homePathString--%@",homePathString);
//documents路径 ?
//第一个参数:要找寻的目标文件
//第二个参数:查找到范围(要找寻的目标文件夹的父级文件夹)
//第三个参数:文件路径是否展开
NSArray* documentsArray = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString* documents = documentsArray.firstObject;
NSLog(@"documents---%@",documents);
//Library
NSArray* libraryArray = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
NSString* libraryPath = libraryArray.firstObject;
NSLog(@"library---%@",libraryPath);
//caches
NSArray* cachesArray = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString* cachesPath = cachesArray.firstObject;
NSLog(@"cachesPath---%@",cachesPath);
//preferences
NSString* preferences = [libraryPath stringByAppendingString:@"/preferences"];
NSLog(@"preferences---%@",preferences);
//tmp
NSString* tmpPath = NSTemporaryDirectory();
NSLog(@"tmpPath---%@",tmpPath);
}
文件的写入与读取
//文件的写入
- (void)wirteToFile{
//将一段字符串写入documents文件夹中
NSString* docPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject;
//在上面的路径下创建一个文件路径,用来盛放文字 PathComponent不会加 /
NSString* txtPath = [docPath stringByAppendingPathComponent:@"string.txt"];
//将文字写入文件中,当文字写入文件的时候,如果文件不存在,系统会先创建,在写入;如果存在,直接写人。新的内容会将原有内存覆盖掉。
NSString* contentString = @"我是文本内容";
//写入操作
//第一个参数:文件路径
//第二个参数:原子性 YES:在写入过程中会产生一个临时文件,当内容写入完整的时候,才会将内容移动到目标文件中; NO:直接在目标文件上操作,不会产生临时文件,有可能破坏目标文件。
//encoding:字符串的编码格式
//error:如果写入出问题,这里会产生一个错误日志,一般不需要错误日志,直接赋值为nil
//error对象用来保存错误日志
NSError* error = nil;
BOOL isSuccess = [contentString writeToFile:txtPath atomically:YES encoding:NSUTF8StringEncoding error:&error];
//只知道写入的结果,没有失败过程描述
if (isSuccess) {
NSLog(@"成功");
}else{
NSLog(@"失败");
}
//有写入失败的细节描述
if (error) {
NSLog(@"写入文件错误----%@",error.description);
}else{
NSLog(@"写入成功");
}
}
//读取文件
- (void)readToFile{
//要读取文件的路径
NSString* docPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject;
NSString* txtPath = [docPath stringByAppendingPathComponent:@"string.txt"];
//读取文件
NSString* readString = [NSString stringWithContentsOfFile:txtPath encoding:NSUTF8StringEncoding error:nil];
NSLog(@"我是读取出来的----%@",readString);
}
数组的写入与读取
//写入数组
-(void)wirteToArray{
NSString* doc = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject;
NSString* path = [doc stringByAppendingPathComponent:@"array.plist"];
NSArray* array = @[@"1",@"2",@"3"];
[array writeToFile:path atomically:YES];
}
//数组读取
- (void)readArray{
//路径
NSString* docPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject;
NSString* arrayPath =[docPath stringByAppendingPathComponent:@"array.plist"];
//读取
NSArray* array = [NSArray arrayWithContentsOfFile:arrayPath];
NSLog(@"array--%@",array);
}
读取应用程序中的的文件 以及 图片写入到文件中
//读取应用程序中的的文件,可读不可写
-(void)readAppFile{
//路径
NSString* path =[[NSBundle mainBundle] pathForResource:@"Info.plist" ofType:nil];
//读取
// NSString* string = [[NSString alloc]initWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
NSDictionary* dic = [[NSDictionary alloc]initWithContentsOfFile:path];
NSLog(@"读取左侧目录栏---%@",dic);
}
//将图片写入到文件中
-(void)imageWriteToFile{
NSArray* pathArray =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
//doucument路径
NSString* docPath = pathArray.firstObject;
NSString* imagePath = [docPath stringByAppendingString:@"/l.jpg"];
//图片写入
//将图片转换为NSData类型才能写入文件
UIImage* image = [UIImage imageNamed:@"l.jpg"];
//UIImage -> NSData
NSData* imageData = UIImageJPEGRepresentation(image, 1.0);
[imageData writeToFile:imagePath atomically:YES];
}
切记在viewDidLoad方法里面调用以上方法。
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhfgkigg
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01