Objective-C中的文件操作是由NSFileManager溯捆,它包含了常用的文件操作作丑搔。
具體如下:
1、創(chuàng)建一個(gè)文件提揍。
2啤月、從文件讀取。
3劳跃、向文件寫(xiě)數(shù)據(jù)谎仲。
4、重命名一個(gè)文件刨仑。
5郑诺、刪除一個(gè)文件夹姥。
6、測(cè)試一個(gè)文件是否存在辙诞。
7辙售、檢測(cè)一個(gè)文件大小以及其他屬性。
8飞涂、復(fù)制一個(gè)文件旦部。
9、判斷兩個(gè)文件內(nèi)容是否相等较店。
NSFileHandle提供了一些方法士八,可以讓你
1、讀寫(xiě)更新一個(gè)文件梁呈。
2婚度、在某一文件中找到某一位置。
3官卡、向或者從某一文件中讀或者寫(xiě)一定字節(jié)數(shù)的數(shù)據(jù)陕见。
這些方法也可以應(yīng)用于硬件和socket。
NSURL很顯然就是讓你處理url的味抖。
NSBundle用來(lái)處理應(yīng)用束。
Managing Files and Directories: NSFileManager
~用戶(hù)名灰粮,代表某用戶(hù)的家目錄仔涩。
.代表當(dāng)前目錄。
..代表上一級(jí)目錄粘舟。
目錄名稱(chēng)的話(huà)熔脂,能獲取盡量獲取,應(yīng)該避免自己敲路徑柑肴,因?yàn)檫@樣容易出錯(cuò)霞揉。
P379中表16.1列出了NSFileManager中常用的方法。
attributesOfItemAtPath:traverseLink:返回包含文件屬性的目錄信息晰骑。
moveItemAtPath:toPath:能把一個(gè)文件從一個(gè)目錄移動(dòng)到另一個(gè)目錄适秩,它也可以移動(dòng)整個(gè)目錄,如果兩條路徑指向同一文件硕舆,那該函數(shù)的作用是重命名該文件秽荞。
attributesOfItemAtPath:error:用來(lái)測(cè)試一個(gè)路徑是否為空。
objectForKey:通過(guò)使用NSFileSize來(lái)獲取文件的大小抚官。
removeItemAtPath:error:能刪除指定目錄下的文件扬跋。
stringWithContentsOfFile:encoding:error:能讀取某文件中的內(nèi)容并轉(zhuǎn)化成為字符串對(duì)象。
這些方法每個(gè)都會(huì)返回一個(gè)整型值凌节,其中0代表正常钦听,非0代表錯(cuò)誤洒试,不同的數(shù)字代表不同的錯(cuò)誤。
Working with the NSData Class
NSData能提供緩沖區(qū)朴上,這類(lèi)似于C/C++中的buffer垒棋,對(duì)于32位應(yīng)用而言該緩沖區(qū)大小為2G,對(duì)于64位應(yīng)用而言該緩沖區(qū)大小為8E余指,因此這個(gè)緩沖區(qū)是足夠用的捕犬。
它也有mutable和immutable兩個(gè)版本。
文件緩沖的過(guò)程實(shí)質(zhì)上就是文件內(nèi)容復(fù)制的過(guò)程酵镜。
contentsAtPath:根據(jù)一條路徑把文件內(nèi)容讀進(jìn)緩沖區(qū)碉碉,最后要么返回緩沖區(qū)對(duì)象要么返回nil。
createFileAtPath:contents:attributes:能用指定的屬性創(chuàng)建文件淮韭,該文件的內(nèi)容是某NSData對(duì)象垢粮。
Working with Directories
P384中表16.2列出了NSFileManager中常用的目錄操作方法。
在IOS設(shè)備中你的程序是跑在沙箱里的靠粪,如果你獲取當(dāng)前路徑會(huì)發(fā)現(xiàn)你的程序正在根目錄下蜡吧,而不是你的目標(biāo)路徑,這都是因?yàn)槟愕某绦蛟谏诚渲小?br>
changeCurrentDirectoryPath:更改當(dāng)前路徑占键。
Enumerating the Contents of a Directory
enumeratorAtPath:能夠列出每個(gè)文件昔善,如果遇到目錄就繼續(xù)遞歸地列出那個(gè)目錄下的所有文件直到?jīng)]有目錄為止。你可以使用skipDescendants來(lái)跳過(guò)目錄畔乙。
contentsOfDirectoryAtPath:error:所有文件被放置進(jìn)一個(gè)數(shù)組中返回君仆,如果遇到目錄不迭代列舉。
Working with Paths: NSPathUtilities.h
這個(gè)頭文件包含了大量的函數(shù)和方法牲距,是NSString的擴(kuò)展返咱,能讓你更加靈活多變地操縱路徑字符串。
NSTemporaryDirectory返回某目錄的路徑牍鞠,該目錄可用于創(chuàng)建臨時(shí)文件咖摹。既然是臨時(shí)文件,你應(yīng)該在用完以后刪除它們难述。
lastPathComponent用于抽取某路徑下的最后一個(gè)文件萤晴。
stringByAppendingPathComponent:用于把一個(gè)文件名添加到一個(gè)路徑的末尾上去。你可以聯(lián)合currentDirectoryPath為當(dāng)前目錄下的文件創(chuàng)建完整的路徑胁后。
pathExtension為已知的文件提供文件后綴名硫眯。
NSHomeDirectory返回當(dāng)前用戶(hù)的家目錄,你也可以用NSHomeDirectoryForUser返回任何用戶(hù)的家目錄择同。
pathComponents返回一條路徑中的各個(gè)組成部分两入。
Common Methods for Working with Paths
P392中表16.3中列舉了常用的路徑操作方法。
P393中表16.4中列舉了常用的用于獲取某一用戶(hù)信息敲才,比如家目錄和存儲(chǔ)臨時(shí)文件的目錄的函數(shù)裹纳。
NSSearchPathForDirectoriesInDomains可以讓你定位系統(tǒng)和設(shè)備上特定的目錄择葡。
P394表16.5列舉了常用的IOS路徑。
NSSearchPathForDirectoriesInDomains返回一個(gè)路徑的數(shù)組剃氧,如果你查找某個(gè)用戶(hù)的路徑它會(huì)返回一個(gè)元素敏储,如果是根據(jù)第二個(gè)參數(shù)則返回的結(jié)果可能不止一個(gè)元素。當(dāng)你寫(xiě)IOS應(yīng)用的時(shí)候第二個(gè)參數(shù)應(yīng)該是NSUserDomainMask朋鞍。
Copying Files and Using the NSProcessInfo Class
Unix下命令行中的文件其實(shí)是路徑的一部分已添,其實(shí)質(zhì)是路徑。如果你寫(xiě)的目的地中文件已經(jīng)存在滥酥,則該文件會(huì)被覆蓋更舞。
NSProcessInfo類(lèi)允許你設(shè)置和檢索某信息的類(lèi)型。
NSProcessInfo’s arguments返回一個(gè)字符串?dāng)?shù)組坎吻。
copyPath:ToPath:handler:不允許文件被覆蓋缆蝉,因此,在應(yīng)用此方法之前需要用removeFileAtPath:handler:刪除原文件
Basic File Operations: NSFileHandle
使用NSFileHandle分為3步:
1瘦真、打開(kāi)文件刊头,獲取所指文件的NSFileHandle對(duì)象。
2诸尽、進(jìn)行IO操作原杂。
3、關(guān)閉文件您机。
P399表16.7總結(jié)了常用的NSFileHandle方法污尉。
NSFileHandle并不提供文件的創(chuàng)建功能。
readDataToEndOfFile:每次最多讀取UINT_MAX字節(jié)的數(shù)據(jù)往产。
readDataOfLength:可以通過(guò)建立循環(huán)在文件間傳輸字節(jié)緩沖區(qū),這個(gè)緩沖區(qū)長(zhǎng)度可能是8k也可能是128k某宪。
如果一個(gè)讀取函數(shù)沒(méi)有讀取到任何數(shù)據(jù)仿村,它會(huì)返回一個(gè)空的NSData對(duì)象。你也可以通過(guò)對(duì)緩沖區(qū)應(yīng)用length所得的結(jié)果與0進(jìn)行比較來(lái)判斷是否緩沖區(qū)中仍然有數(shù)據(jù)需要被讀進(jìn)來(lái)兴喂。
seekToFileOffset:可以設(shè)置文件指針的位置蔼囊,如下圖所示:
上圖中作用的對(duì)象是文件句柄databaseHandle,指針的偏移量是10衣迷。
offsetInFile用于獲取當(dāng)前文件指針的位置畏鼓,如下圖所示:
seekToEndOfFile返回當(dāng)前文件指針的位置。
The NSURL Class
不用解釋?zhuān)@個(gè)解釋處理url的壶谒。
一個(gè)NSURL對(duì)象并不是一個(gè)string對(duì)象云矫,但是你可以通過(guò)URLWithString:把string轉(zhuǎn)換成NSURL,如下圖所示:
dictionaryWithContentsOfURL:可以讀取某網(wǎng)站的存儲(chǔ)屬性列表的目錄汗菜,如果這個(gè)屬性列表是用數(shù)組存儲(chǔ)的你可以使用arrayWithContentsOfURL:來(lái)讀取让禀。
dataWithContentsOfURL:可以讓你從某網(wǎng)站讀取任意類(lèi)型的數(shù)據(jù)挑社。
The NSBundle Class
一個(gè)application bundle是指與某應(yīng)用相關(guān)的所有資源,包括圖片巡揍,圖標(biāo)痛阻。
NSBundle讓你訪(fǎng)問(wèn)應(yīng)用中的這些資源。
mainBundle能指出application bundle所在的位置腮敌。
pathForResource:ofType:定位application bundle所在位置中的某文件并返回一個(gè)路徑阱当。
pathsForResourcesOfType:inDirectory:能返回某類(lèi)型資源的路徑,可能是一個(gè)數(shù)組糜工,這個(gè)inDirectory指的是應(yīng)用程序的子目錄弊添,如果目標(biāo)類(lèi)型資源不在任何子目錄中,則此處實(shí)參為@””啤斗。