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:0];

NSLog(@"Documents path: %@",documentPath);

// 获得应用程序沙盒的Caches文件夹路径

NSArray *arrCachesPaths=NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask,YES);

NSString *CachesPath=[arrCachesPaths objectAtIndex:0];

NSLog(@"Caches path: %@",CachesPath);

// 获得应用程序沙盒的Downloads文件夹路径

NSArray *arrDownloadPaths=NSSearchPathForDirectoriesInDomains(NSDownloadsDirectory,NSUserDomainMask,YES);

NSString *loadPathsPath=[arrDownloadPaths objectAtIndex:0];

NSLog(@"Downloads path: %@",loadPathsPath);

// 获得应用程序沙盒的home文件夹路径

NSString *homePath= NSHomeDirectory();

// 获得应用程序沙盒的tmp文件夹路径

NSString *TmpPath= NSTemporaryDirectory();

为了方便使用整理一个File工具类:

FileUtils.h

#import@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:0 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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,298评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,701评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,078评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,687评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,018评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,410评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,729评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,412评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,124评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,379评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,903评论 1 257
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,268评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,894评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,014评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,770评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,435评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,312评论 2 260

推荐阅读更多精彩内容

  • 每个iOS应用都有自己的应用沙盒(应用沙盒就是文件系统目录),与其他文件系统隔离。应用必须待在自己的沙盒里,其他应...
    彬至睢阳阅读 559评论 0 0
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,036评论 29 470
  • 沙盒 Plist Preference偏好设置 NSKeyedArchiver归档 / NSKeyedUnarch...
    追风者366阅读 3,236评论 0 6
  • 一、iOS中的沙盒机制 iOS应用程序只能对自己创建的文件系统读取文件,这个独立、封闭、安全的空间,叫做沙盒。它一...
    绚雨蓝了个枫阅读 3,990评论 0 2
  • 应该怎样教语法,或者是否应该教语法,这在英语世界里是个很棘手的问题。信仰(或怀疑)语法教学是我们面临的中心内容,也...
    JasonEnglish阅读 478评论 0 1