iOS數據持久化之寫入沙盒

iOS持久化有很多種,那麼首先我們先來探討一下文件的讀寫,即將文件寫入到指定的沙盒路徑中,但是這種持久化方式的儲存對象有限制 只能寫入4中類型(NSString, NSArray,NSDictionary,NSData)

首先,先找到我們寫入文件的路徑,我們先來看看沙盒路徑

//參數1,枚舉值,搜索的文件夾
    //參數2,枚舉值,搜索的域(類似於windows下的盤符CDEF等)
    //參數3,波爾值,是否使用絕對路徑
    //由於沙盒機制的限制,只能夠操作自己的沙盒,域都使用NSUserDomainMask(用戶域)
    //由於可能每個域中都可能出現相同的文件夾,所以這個app返回值是NSArray
    NSString *documenrsParh = [NSSearchPathForDirectoriesInDomains
    (NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
    NSLog(@"%@", documenrsParh);
    
    //library:存放資源文件(視頻,圖片等)
    NSString *libraryParh = [NSSearchPathForDirectoriesInDomains
    (NSLibraryDirectory, NSUserDomainMask, YES) firstObject];
    NSLog(@"%@", libraryParh);
    
    //Caches:Library的子文件夾,存放緩存數據(例如圖片的緩存)
    NSString *cachesParh = [NSSearchPathForDirectoriesInDomains
    (NSCachesDirectory, NSUserDomainMask, YES) firstObject];
    NSLog(@"%@", cachesParh);
    //Preferences:Library的子文件夾,存放一些配置文件(例如NSUserDefaults生成的plist文件)
    //一般不會直接使用
    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
    [userDefaults setBool:YES forKey:@"first"];
    [userDefaults synchronize];
    
    //tmp:存放臨時文件(例如zip壓縮包,解壓過後,刪掉)
    NSLog(@"%@", NSTemporaryDirectory());

接下來我們創建文件內容,並且將文件存入到指定的路徑,如果指定路徑沒有該文件,那麼系統會重新創建一個

    //創建文件內容
    NSString *string = [NSString stringWithFormat:@"新年快樂!"];
    //創建文件路徑
    NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
    NSString *filePath = [docPath stringByAppendingPathComponent:@"test.txt"];
    //寫入到指定的文件路徑
    //注:如果發現沒有這個文件夾,就自動創建
    //每次修改文件內容,都是一個覆蓋過程
    NSError *errror = nil;
    BOOL result = [string writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:&errror];
    if (result) {
        NSLog(@"寫入成功");
    } else {
        NSLog(@"%@", errror);
    }
文件的讀取,文件的讀取和寫入其實是一個相反的過程

    //讀取操作
    //創建路徑
    NSString *string1 = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
    NSString *flPath = [string1 stringByAppendingPathComponent:@"test.txt"];
    NSError *error1 = nil;
    NSString *string2 = [NSString stringWithContentsOfFile:flPath encoding:NSUTF8StringEncoding error:&error1];
    if (error1) {
        NSLog(@"%@", error1);
    } else {
        NSLog(@"%@", string2);
    }
那麼,現在我們可以總結一下

文件的寫入是以"writeToFile"開頭

文件的讀取是以"contentOfFire"


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章