IOS数据存储之文件沙盒存储
前言:
之前学习了数据存储的NSUserDefaults,归档和解档,对于项目开发中如果要存储一些文件,比如图片,音频,视频等文件的时候就需要用到文件存储了。文件沙盒存储主要存储非机密数据,大的数据。
接下来具体认识一下沙盒存储:
每个ios应用都有自己的应用沙盒,应用沙盒就是文件系统目录,与其他应用的文件系统隔离,ios系统不允许访问其他应用的应用沙盒。在ios8中已经开放访问。
应用沙盒一般包括以下几个文件目录:应用程序包、Documents、Libaray(下面有Caches和Preferences目录)、tmp。
应用程序包:包含所有的资源文件和可执行文件。
Documents:保存应用运行时生成的需要持久化的数据,iTunes会自动备份该目录。苹果建议将程序中建立的或在程序中浏览到的文件数据保存在该目录下,iTunes备份和恢复的时候会包括此目录
tmp:保存应用运行时所需的临时数据,使用完毕后再将相应的文件从该目录删除。应用没有运行时,系统也有可能会清除该目录下的文件,iTunes不会同步该目录。iphone重启时,该目录下的文件会丢失。
Library:存储程序的默认设置和其他状态信息,iTunes会自动备份该目录。
Libaray/Caches:存放缓存文件,iTunes不会备份此目录,此目录下文件不会在应用退出删除。一般存放体积比较大,不是特别重要的资源。
Libaray/Preferences:保存应用的所有偏好设置,ios的Settings(设置)应用会在该目录中查找应用的设置信息,iTunes会自动备份该目录。
具体获取各个目录代码如下:
// 获得应用程序沙盒的Documents文件夹路径
NSArray *arrDocumentPaths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES); NSString *documentPath=[arrDocumentPaths objectAtIndex:];
NSLog(@"Documents path: %@",documentPath); // 获得应用程序沙盒的Caches文件夹路径
NSArray *arrCachesPaths=NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask,YES);
NSString *CachesPath=[arrCachesPaths objectAtIndex:];
NSLog(@"Caches path: %@",CachesPath); // 获得应用程序沙盒的Downloads文件夹路径
NSArray *arrDownloadPaths=NSSearchPathForDirectoriesInDomains(NSDownloadsDirectory,NSUserDomainMask,YES);
NSString *loadPathsPath=[arrDownloadPaths objectAtIndex:];
NSLog(@"Downloads path: %@",loadPathsPath); // 获得应用程序沙盒的home文件夹路径
NSString *homePath= NSHomeDirectory(); // 获得应用程序沙盒的tmp文件夹路径
NSString *TmpPath= NSTemporaryDirectory();
为了方便使用整理一个File工具类:
FileUtils.h
#import <Foundation/Foundation.h> @interface FileUtils : NSObject //返回缓存根目录 "caches"
+(NSString *)getCachesDirectory; //返回根目录路径 "document"
+ (NSString *)getDocumentPath; //创建文件夹
+(BOOL)creatDir:(NSString*)dirPath; //删除文件夹
+(BOOL)deleteDir:(NSString*)dirPath; //移动文件夹
+(BOOL)moveDir:(NSString*)srcPath to:(NSString*)desPath; //创建文件
+ (BOOL)creatFile:(NSString*)filePath withData:(NSData*)data; //读取文件
+(NSData*)readFile:(NSString *)filePath; //删除文件
+(BOOL)deleteFile:(NSString *)filePath; //返回 文件全路径
+ (NSString*)getFilePath:(NSString*) fileName; //在对应文件保存数据
+ (BOOL)writeDataToFile:(NSString*)fileName data:(NSData*)data; //从对应的文件读取数据
+ (NSData*)readDataFromFile:(NSString*)fileName; @end
FileUtils.m
#import "FileUtils.h" @implementation FileUtils //返回缓存根目录 "caches"
+(NSString *)getCachesDirectory
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *caches = [paths firstObject];
return caches;
} //返回根目录路径 "document"
+ (NSString *)getDocumentPath
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentPath = [paths firstObject];
return documentPath;
} //创建文件目录
+(BOOL)creatDir:(NSString*)dirPath
{
if ([[NSFileManager defaultManager] fileExistsAtPath:dirPath])//判断dirPath路径文件夹是否已存在,此处dirPath为需要新建的文件夹的绝对路径
{
return NO;
}
else
{
[[NSFileManager defaultManager] createDirectoryAtPath:dirPath withIntermediateDirectories:YES attributes:nil error:nil];//创建文件夹
return YES;
} } //删除文件目录
+(BOOL)deleteDir:(NSString*)dirPath
{
if([[NSFileManager defaultManager] fileExistsAtPath:dirPath])//如果存在临时文件的配置文件 {
NSError *error=nil;
return [[NSFileManager defaultManager] removeItemAtPath:dirPath error:&error]; } return NO;
} //移动文件夹
+(BOOL)moveDir:(NSString*)srcPath to:(NSString*)desPath;
{
NSError *error=nil;
if([[NSFileManager defaultManager] moveItemAtPath:srcPath toPath:desPath error:&error]!=YES)// prePath 为原路径、 cenPath 为目标路径
{
NSLog(@"移动文件失败");
return NO;
}
else
{
NSLog(@"移动文件成功");
return YES;
}
} //创建文件
+ (BOOL)creatFile:(NSString*)filePath withData:(NSData*)data
{ return [[NSFileManager defaultManager] createFileAtPath:filePath contents:data attributes:nil];
} //读取文件
+(NSData*)readFile:(NSString *)filePath
{
return [NSData dataWithContentsOfFile:filePath options: error:NULL];
} //删除文件
+(BOOL)deleteFile:(NSString *)filePath
{ return [self deleteDir:filePath]; } + (NSString *)getFilePath:(NSString *)fileName
{
NSString *dirPath = [[self getDocumentPath] stringByAppendingPathComponent:fileName];
return dirPath;
} + (BOOL)writeDataToFile:(NSString*)fileName data:(NSData*)data
{
NSString *filePath=[self getFilePath:fileName];
return [self creatFile:filePath withData:data];
} + (NSData*)readDataFromFile:(NSString*)fileName
{
NSString *filePath=[self getFilePath:fileName];
return [self readFile:filePath];
} @end
IOS数据存储之文件沙盒存储的更多相关文章
- 背水一战 Windows 10 (101) - 应用间通信: 通过协议打开指定的 app 并传递数据以及获取返回数据, 将本 app 沙盒内的文件共享给其他 app 使用
[源码下载] 背水一战 Windows 10 (101) - 应用间通信: 通过协议打开指定的 app 并传递数据以及获取返回数据, 将本 app 沙盒内的文件共享给其他 app 使用 作者:weba ...
- iOS怎样找到自己的沙盒
iOS怎样找到自己的沙盒 在ios开发我们会用到沙盒,因为自己对沙盒理解的不够,所以找不到沙盒文件在哪里,当然要知道路径了 比如我的路径 NSString* cachepath = [NSHomeDi ...
- iOS存储数据字典到沙盒
1.创建一个账号数据模型 用来存放从服务器返回的数据,一般返回的是一个字典,里面包含了这个登陆用户的各种信息,这个数据模型就是用来存放这些东西的 创建一个数据模型 YYCAccount 继承 NSO ...
- IOS文件沙盒
在进行IPhone开发的时候,常常需要将简单的数据保存到文件中,以便下次再重新打开的时候能够读取文件中保存的数据. 下面就来做一个简单的demo: 步骤: 1.创建一个SingleView项目,带有x ...
- iOS 开发查看应用的沙盒文件
在iOS开发中,常常需要将一些信息保存到本地,比如说用户的一些搜索历史等.那么,如何查看所保存的文件呢? 这里介绍两种途径来查看应用的沙盒文件. 方法一:通过Xcode来查看,步骤如下: (1): X ...
- iOS开发 - 获取真机沙盒数据
今天要获取之前真机測试时写入沙盒的数据, 本来以为挺麻烦的. 后来捣腾了一下, 才知道原来这么简单... 以下直接看详细步骤. 前提: 真机已经通过USB和你的电脑连接上了! 1.进入Organize ...
- iOS面试题--Model层--沙盒的目录结构是怎么样的?各自一般用于什么场合?
沙盒的目录结构是怎么样的?各自一般用于什么场合? 一.iOS沙盒机制 iOS的应用只能访问为该应用创建的区域,不可访问其他区域,应用的其他非代码文件都存在此目录下,包括图片,属性文件plist,bun ...
- 【iOS知识学习】_iOS沙盒机制
IOS中的沙盒机制(SandBox)是一种安全体系,它规定了应用程序仅仅能在为该应用创建的目录内读取文件,不能够訪问其它地方的内容.全部的非代码文件都保存在这个地方.比方图片.声音.属性列表和文本文件 ...
- iOS 8 之后的动态沙盒路径
在iOS8之前,我们获取到沙盒中的document.cache.tmp之后,下一次模拟器或真机无论重启多少次,这具体的路径是固定的,可是iOS8 之后,你要是在按原来的路径去找你想要的东西,我想它会把 ...
随机推荐
- BZOJ4455: [Zjoi2016]小星星
Description 小Y是一个心灵手巧的女孩子,她喜欢手工制作一些小饰品.她有n颗小星星,用m条彩色的细线串了起来,每条细 线连着两颗小星星.有一天她发现,她的饰品被破坏了,很多细线都被拆掉了.这 ...
- Font Squirrel
Font Squirrel FontSquirrel:国外免费字体下载网是一个提供高质量商业字体下载网站,提供海量的英文字体库,用户可以随意下载并应用于各种商业用字,无需考虑其版权问题. 官网地址:h ...
- 整理ViewController的生命周期和加载过程
按照执行顺序排列 - initWithCoder:通过nib文件初始化时触发 - awakeFromNib:nib文件被加载的时候,会发送一个awakeFromNib的消息到nib文件中的每个对象 p ...
- sparkR读取csv文件
sparkR读取csv文件 The general method for creating SparkDataFrames from data sources is read.df. This met ...
- tcpdump
tcpdump tcp -i eth1 -t -s -c and dst port ! and src net -w ./target.cap (1)tcp: ip icmp arp rarp 和 t ...
- 搭建ssh后的简化
对于SSh框架的简化,我们可以从下面几个方面来剖析: 1.实体类entity 2.注入 3.类注解 下面,我来一一为大家讲解.ps:写的不好还请多多指教,欢迎大家"来找茬". 关于 ...
- WebService的一些案例
既然要实现WebService,首先先来创建一个Service类 package cn.happy.webservice; import javax.jws.WebService; import ja ...
- 导入导出Excel工具类ExcelUtil
前言 前段时间做的分布式集成平台项目中,许多模块都用到了导入导出Excel的功能,于是决定封装一个ExcelUtil类,专门用来处理Excel的导入和导出 本项目的持久化层用的是JPA(底层用hibe ...
- 记sql server 2008R2 两台服务器 使用非默认端口的发布订阅
最近研究数据库的复制.因为要在两台服务器上,当使用数据库的默认1433端口时,订阅发布没有任何问题,考虑到数据库的安全性问题,需要改用其他端口.这里以10010为例. 有A.B两台服务器:A作为发布服 ...
- IRP完成例程返回值理解
第一,完成例程里面直接返回STATUS_SUCCESS,这时候IRP已经继续向上回卷,失去了对IRP的控制. 第二,完成例程里面返回STATUS_MORE_PROCESSING_REQUIRED,仍具 ...