iOS開發之資料讀寫

2022-08-31 10:12:12 字數 4792 閱讀 6529

ios高階

1:資料處理之資料讀寫

1):獲取當前應用程式的沙盒根目錄

nsstring*rootpath = nshomedirectory();

nslog(@"%@",rootpath);

rootpath就是根目錄

然後將列印出來的檔案目錄右鍵單擊選擇services下的reveal in finder

2):documents:儲存持久化檔案資料

library/caches:儲存快取資料

library/preferences:儲存應用的所有偏好設定

tmp:儲存應用執行時所需的臨時資料

3):定位當前應用程式的沙盒根目錄

nsstring*docpath = [nssearchpathfordirectoriesindomains(nsdocumentdirectory, nsuserdomainmask, yes) firstobject];

nslog(@"%@",docpath);

nsstring*libpath = [nssearchpathfordirectoriesindomains(nslibrarydirectory, nsuserdomainmask, yes) firstobject];

nslog(@"libpath is %@",libpath);

nsstring*cachespath = [nssearchpathfordirectoriesindomains(nscachesdirectory, nsuserdomainmask, yes) firstobject];

nslog(@"cachespath is %@",cachespath);

只能用拼接方法定位

nslog(@"prepath is %@",prepath);

nsstring*tmppath = nstemporarydirectory();

nslog(@"tmppath is %@",tmppath);

4):儲存應用程式的偏好設定的類:nsuserdefaults

nsuserdefaults *defaults = [nsuserdefaults standarduserdefaults] ;

[defaults setobject:@"tang" forkey:@"name"] ;

//同步

[defaults synchronize] ;

nslog(@"%@",[defaults objectforkey:@"name"]);

5):簡單物件的讀寫操作

只有四種簡單的資料型別才能直接寫入進檔案

nsstring nsdictionary nsdata nsarray

第一步:獲取沙盒下資料夾documents的路徑

nsstring*docpath = [nssearchpathfordirectoriesindomains(nsdocumentdirectory, nsuserdomainmask, yes) lastobject];

第二步:建立需要寫入的檔案路徑

第三步:建立字串物件

nsstring*string = @"is副科級領導蓋房了";

第四步:寫入,四種簡單的資料型別的寫入方法差不多的

[string writetofile:filepath atomically:yesencoding:nsutf8stringencodingerror:nil];

第五步:讀取字串物件

nsstring*resultstr = [nsstringstringwithcontentsoffile:filepath encoding:nsutf8stringencodingerror:nil];

陣列和字典可參照字串物件的寫入讀取方法

*nsdata物件的寫入和讀取(將儲存)

第一步和第二步是一樣的

第三步:uiimage*image = [uiimageimagenamed:@"0"];

第四步:nsdata*data = uiimagepngrepresentation(image);

第五步:寫入

[data writetofile:datapath atomically:yes];

讀取並在模擬器上顯示:

nsdata*resultdata = [nsdatadatawithcontentsoffile:datapath];

uiimage*reimage = [uiimageimagewithdata:resultdata];

uiimageview*imageview = [[uiimageviewalloc] initwithimage:reimage];

imageview.frame= self.view.bounds;

[self.viewaddsubview:imageview];

6):在沙盒目錄下建立檔案

第一步:找到沙盒路徑(caches)

//1.獲取documents目錄

nsstring*docpath = [nssearchpathfordirectoriesindomains(nsdocumentdirectory, nsuserdomainmask, yes) lastobject];

//2.建立檔案路徑

//3.建立檔案管理物件

nsfilemanager*manager = [nsfilemanagerdefaultmanager];

//4.建立

[manager createfileatpath:filepath contents:[@"sdfasdfs"datausingencoding:nsutf8stringencoding] attributes:nil];

nslog(@"%@",filepath);

//計算檔案或資料夾的大小

nsdictionary*dic = [manager attributesofitematpath:filepath error:nil];

nslog(@"%@",dic);

nsnumber*number = [dic objectforkey:nsfilesize];

nslog(@"%@",number);

7):建立資料夾和建立檔案的核心**差別在:

a:資料夾路徑沒有字尾名,檔案有

b:檔案管理器建立方法的不同

//2.建立資料夾的路徑

//3.建立檔案管理器物件

nsfilemanager*manager = [nsfilemanagerdefaultmanager];

[manager createdirectoryatpath:filepath withintermediatedirectories:yesattributes:nilerror:nil];

/*在documents資料夾下,建立乙個資料夾(path),在該資料夾下建立乙個檔案(test.txt),將乙個物件存入到該檔案中,然後在caches資料夾下建立乙個資料夾名為"testdirectroy",將test.txt檔案複製到這個資料夾下.

*/- (void)movefile

/*練習要求:

在documents目錄下建立乙個檔案text.txt

從檔案的偏移量為3的時候開始追加內容1234

*/- (void)addcontent

//核心**如下

//建立檔案對接物件

nsfilehandle*handle = [nsfilehandlefilehandleforupdatingatpath:filepath];

//此時的檔案對接物件既可以讀也可以寫

//將偏移量移動到3的位置

[handle seektofileoffset:3];

//寫入資料

[handle writedata:[@"1"datausingencoding:nsutf8stringencoding]];

//執行完操作之後不要忘了關閉檔案

[handle closefile];

8):複雜檔案的歸檔和反歸檔(持久化操作)

//歸檔

- (void)archiver

//反歸檔

- (void)unarchiver

//還要建立乙個模型物件person,遵循nscoding協議

實現兩個協議方法:

- (instancetype)initwithname:(nsstring*)name age:(nsstring*)age

returnself;

}- (void)encodewithcoder:(nscoder*)acoder

- (nullableinstancetype)initwithcoder:(nscoder*)adecoder

//4.寫入

uiimage*image = [uiimageimagenamed:@"0"];

nsdata*data = uiimagepngrepresentation(image);

[data writetofile:testpath atomically:yes];

//4.建立檔案對接器

nsfilehandle*handle = [nsfilehandlefilehandleforupdatingatpath:textpath];

//此時檔案在更新狀態下,即可讀也可寫

[handle seektofileoffset:3];

//5.開始在偏移量為3的地方寫入字串

[handle writedata:[@"1234"datausingencoding:nsutf8stringencoding]];

[handle closefile];

nslog(@"%@",textpath);

iOS開發之資料儲存

xml屬性列表 plist 歸檔 preference 偏好設定 本質還是通過 plist 來儲存資料,但是使用更簡單 無需關注檔案 資料夾路徑和名稱 nskeyedarchiver歸檔 nscoding 把任何物件,直接儲存為檔案的方式。sqlite3 當非常大量的資料儲存時使用 core dat...

iOS開發之資料儲存之NSData

1 概述 使用archiverootobject tofile 方法可以將乙個物件直接寫入到乙個檔案中,但有時候可能想將多個物件寫入到同乙個檔案中,那麼就要使用nsdata來進行歸檔物件。nsdata可以為一些資料提供臨時儲存空間,以便隨後寫入檔案,或者存放從磁碟讀取的檔案內容。可以使用 nsmut...

iOS開發之資料儲存之NSData

1 概述 使用archiverootobject tofile 方法可以將乙個物件直接寫入到乙個檔案中,但有時候可能想將多個物件寫入到同乙個檔案中,那麼就要使用nsdata來進行歸檔物件。nsdata可以為一些資料提供臨時儲存空間,以便隨後寫入檔案,或者存放從磁碟讀取的檔案內容。可以使用 nsmut...