Objective-C之成魔之路【16-使用檔案】,objective-c16-
郝萌主傾心貢獻,尊重作者的勞動成果,請勿轉載。
如果文章對您有所協助,歡迎給作者捐贈,支援郝萌主,捐贈數額隨意,重在心意^_^
我要捐贈: 點擊捐贈
Cocos2d-X源碼下載:點我傳送
語言的設計主要是被應用於實踐,
而Objective-C應用最廣的地方就是Mac OS X或iOS的Foundation架構。
Foundation架構允許你利用檔案系統對檔案或目錄執行基本操作,這些基本操作是由NSFileManager類提供的。
使用NSFileHandle類提供的方法,可以開啟檔案並對檔案執行多次讀/寫操作。
NSFileHandle類的方法可以實現如下功能:
1)開啟一個檔案,執行讀、寫或更新(讀取和寫入)操作。
2)在檔案中尋找指定位置。
3)從檔案中讀取特定數目的位元組,或將指定數目的位元組寫入檔案。
NSFileHandle類提供的方法也可用於各種裝置或通訊端。
很多語言中使用的架構也有類似的FileHandle。
NSURL類允許在應用中使用URL方法。這個和Java中的URL差不多。
NSBundle類提供了允許在應用中使用包(bundle)的方法,包括搜尋包中的特定資源。
這個東西更類似於Android應用中的Resource或R之類乾的活。
管理檔案和目錄使用NSFileManager,檔案或目錄使用檔案的路徑名為唯一標識。
完整路徑也稱為絕對路徑,以斜線(/)開始。
特殊的代字元(~)作為使用者主目錄的縮寫。
目前的目錄為".";
父目錄為“..”;
這些概念和Linux裡面一樣。
每個檔案方法都是對NSFileManager對象的調用,
而NSFileManager對象是通過向類發送一條defaultManager訊息建立。
iOS的裝置上,程式是運行在沙箱中的,它嚴格限定了檔案的訪問。
如果在裝置中運行這個程式,會看到目前的目錄是/,
這說明應用的根目錄是在運行它的沙箱中,並不是整個iOS裝置檔案目錄的根。
可以這麼理解,每一個應用程式都是一個進程,這樣它的作用範圍就是進程的上下文。沙箱就是進程。
這個和Android是一樣的道理。
Android中,每個應用都運行在一個進程中,每個應用都有自己的pid,即進程號。
也不能隨便訪問別的進程的資料或者奔潰時影響到其它應用。這就是沙箱的原理。
其實,這些相同點都是因為它們兩個生態的最底層OS都是unix類似的原理所致。
熟悉Unix的同學都知道,進程,使用者這些概念,其實就是沙箱的概念。
使用路徑用NSPathUtilities.h
components是一個NSArray對象,它包含路徑中每一部分的字串對象,
Path是一個字串對象,它指定檔案的路徑;ext是路徑副檔名的字串對象。如@“mp3”
為了儲存資料直到下一次運行程式仍能夠使用,可以使用Documents目錄。
每個iOS應用都有自己的Documents目錄供資料寫入。
應用中的Caches目錄也可以用來儲存一些資料。
對於iOS開發說,Apple鼓勵開發人員儲存持久化資料到雲端。
對於這些Documents的理解,可以這麼理解,每個應用程式都是一個使用者。
在類Unix系統中,每一個使用者其實都是在home目錄(Linux系統的home)下的不同使用者檔案夾分開。
不同使用者名稱檔案夾中都有基本的檔案夾,Documents,Downloads這類的。
簡言之,應用程式一般都屬於某一個使用者(UserId),某一個進程(Pid)。
而且一般情況下不同應用程式的使用者標識和進程標識都是不一樣的。這就是所謂沙箱原理。
NSProcessInfo類中的argments方法返回一個字串對象數組。
數組的第一個元素是進程名稱,其餘的元素是在命令列中輸入的參數。
這個類主要用來記錄當前進程的資訊。
其實,我們都知道,unix下的進程入口都是main函數。
這也就是為什麼NSProcessInfo會記錄命令列中的輸入參數的原因。
命令列中的輸入參數都是通過main函數的入參傳入的。
基本檔案操作:NSFileHandle,可用於標準輸入、標準輸出、標準錯誤和控裝置。
應該注意NSFileHandle類並沒有提供建立檔案的功能。
建立檔案須使用FileManager的方法來建立。
另外,Unix系統下,應注意,開啟檔案進行寫入並不會截斷檔案,需要自己完成截斷。
NSURL對象並不是一個字串(如@“http://blog.csdn.net/haomengzhu”),
但是使用URLWithString:方法可以由一個字串對象建立出NSURL對象。
NSBundle類:
當建立一個應用時,系統儲存了應用相關聯的所有資料(其中包括圖片、本地化字串、表徵圖等),
將這些內容放入一個稱為應用程式套件(application bundle)的包中。
在應用中添加一個資源(片或文字檔),僅需將檔案拖到Xcode的左邊窗格中。
mainBundle方法給出了應用程式套件所在的目錄。這個方法在Mac OS X和iOS中都適用。