iOS檔案寫入讀取

2021-07-09 15:05:06 字數 3549 閱讀 5064

最近在學習 ios開發中的資料持久化裡的檔案讀取 以下是自己的寫的一點東西  還請各位看官老爺多多指點

ios在進行資料持久化中採用沙盒, 不允許非本應用程式以外的其他應用程式訪問該應用系統的一些檔案.ios8以後沙盒許可權不再像以前那麼嚴格  .

在進行本地檔案讀取操作中, 首先需要明確 路徑 這個 詞 

我們來列印一下 沙盒的路徑  

nslog(@"%@", nshomedirectory());

獲取後 複製  回到桌面  左上角 前往 下面的 前往資料夾 把剛才的位址貼上上去  或者 回到桌面  cmd + shift + g 快捷方式貼上 剛才的路徑  可以看到 三個資料夾

每個沙盒下邊都有三個資料夾

documents library  tmp

每個路徑下邊都可以進行持久化

documents

最常用的持久化路徑

, 儲存一些不是太大的檔案

, eg.plist

檔案,

文字檔案

,sqlite

檔案documents

上的檔案將來要跟

ituns

進行同步

,放置太大的檔案就會給蘋果伺服器造成太大的壓力

,會被拒絕.

library

把大容量的資料放置到

library

中的cache

下邊, library

在開發工程中很少被直接使用

,cache

路徑上的檔案是不與

itunes

進行同步的.()

preferences

這個路徑上的檔案也是進行同步的

, 這個檔案中一般儲存一些使用者的設定

.(也可以用來判斷使用者

是否第一次安裝該軟體)

tmp 特性,

這是乙個臨時路徑

,不進行同步

,裡邊放的資料當時被重新啟動時

, 資料就會被清空

. //如何獲取document的路徑

//第一種方法

nslog(@"documentpath1 = %@", documentpath1);

//第二種方法  採用 component 

component

也是用來拼接

, 唯一不同 就是我們不用寫 /

nslog(@"documentpath2 = %@", documentpath2);

//使用方法  獲取documents的路徑  使用者沙盒總目錄固定不變 

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

nslog(@"****%@", getdocpath);

//獲取

cache

的路徑

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

nslog(@"getcachepath = %@", getcachepath);

//但是在實際開發中,一般不採用找到該路徑的方法去操作,而是採用nsuserdefaults

nsuserdefaults *userdefaults= [nsuserdefaults standarduserdefaults];

//系統寫好的單例

[userdefaults setobject:@"我樂意

" forkey:@"不美不萌

"]; //

獲取tmp的

nsstring *tmppath = nstemporarydirectory();

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

接下來,就開始進入正題,怎樣 正確的對一些簡單的資料進行讀寫操作呢  以字串, 陣列,字典為例

//字串的讀寫

nsstring *writestr = @"不美不萌我樂意 ";//把

writestr

寫入檔案 //

想捕獲錯誤

就得先宣告物件,

nserror *error = nil;

//取位址的

error

bool writeresult = [writestr writetofile:filepath atomically:yes encoding:nsutf8stringencoding error:&error];

//寫成

yes之後

,在一些極端條件下可以起到保護作用

,yes

相當於把資料寫到乙個新的檔案當中

,成功之後

,系統幫我們完成替換,寫成

no, 

相當於直接向檔案中寫

(把之前寫的資料清空

)if (writeresult == yes) else

//陣列寫入

nsarray *array = @[@"shanshan",@"cyd"];

bool arrayresult = [array writetofile:arraypath atomically:yes];

if (arrayresult) else

//陣列讀取  兩種方法 

//1//

獲取檔案的編碼方式  nsstringencoding  屬於 列舉

nsstringencoding encode = 0;

nsstring *readstr = [nsstring stringwithcontentsoffile:filepath usedencoding:&encode error:nil];

nslog(@"readstr = %@, encode = %ld", readstr, encode);

//2

nsstring *readstr = [nsstring stringwithcontentsoffile:filepath encoding:nsutf8stringencoding error:nil];

nslog(@"readstr = %@", readstr);

//讀取陣列

nsarray *readarray = [nsarray arraywithcontentsoffile:arraypath];

nslog(@"readarray = %@", readarray);

//字典讀寫

nsdictionary *dic = @;

bool dicresult = [dic writetofile:dicpath atomically:yes];

if (dicresult == yes) else

nsdictionary *readdic = [nsdictionary dictionarywithcontentsoffile:dicpath];

nslog(@"readdic = %@", readdic);

寫入 讀取檔案

file類下面的方法 string str file.readalltext aa.txt system.text.encoding.getencoding utf 8 讀取檔案 console.writeline str console.read filestream類下面的方法 在當前目錄建立乙...

讀取寫入檔案

file1 open c users administrator desktop text 成績.txt w encoding gbk file1.write 羅恩 23 35 44 哈利 60 77 68 88 90 馬赫 97 99 89 91 95 99 媽富爾 100 85 90 file1...

檔案讀取 寫入

這是我為了記錄知識隨寫,不喜勿噴 步驟 1.建立檔案流 filestream fs new filestream 路徑名稱 filemethod.提交方式,fileaccess.獲取方式 2.建立讀寫器 文文檔案讀 streamreader sr new streamreader fs 二進位制檔案...