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閱讀 228,739評論 6 534
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,634評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,653評論 0 377
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,063評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,835評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,235評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,315評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,459評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,000評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,819評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,004評論 1 370
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,560評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,257評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,676評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,937評論 1 288
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,717評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,003評論 2 374

推薦閱讀更多精彩內容

  • 每個iOS應用都有自己的應用沙盒(應用沙盒就是文件系統目錄),與其他文件系統隔離。應用必須待在自己的沙盒里,其他應...
    彬至睢陽閱讀 678評論 0 0
  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結起來就是把...
    Dove_iOS閱讀 27,195評論 30 471
  • 沙盒 Plist Preference偏好設置 NSKeyedArchiver歸檔 / NSKeyedUnarch...
    追風者366閱讀 3,374評論 0 6
  • 一、iOS中的沙盒機制 iOS應用程序只能對自己創建的文件系統讀取文件,這個獨立、封閉、安全的空間,叫做沙盒。它一...
    絢雨藍了個楓閱讀 4,113評論 0 2
  • 應該怎樣教語法,或者是否應該教語法,這在英語世界里是個很棘手的問題。信仰(或懷疑)語法教學是我們面臨的中心內容,也...
    JasonEnglish閱讀 530評論 0 1