Chapter 16 Working with Files

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í)參為@””啤斗。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末表箭,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子钮莲,更是在濱河造成了極大的恐慌免钻,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,548評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件崔拥,死亡現(xiàn)場(chǎng)離奇詭異极舔,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)链瓦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)拆魏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人慈俯,你說(shuō)我怎么就攤上這事渤刃。” “怎么了贴膘?”我有些...
    開(kāi)封第一講書(shū)人閱讀 167,990評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵卖子,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我刑峡,道長(zhǎng)洋闽,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,618評(píng)論 1 296
  • 正文 為了忘掉前任突梦,我火速辦了婚禮诫舅,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘宫患。我一直安慰自己刊懈,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,618評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著俏讹,像睡著了一般当宴。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上泽疆,一...
    開(kāi)封第一講書(shū)人閱讀 52,246評(píng)論 1 308
  • 那天户矢,我揣著相機(jī)與錄音,去河邊找鬼殉疼。 笑死梯浪,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的瓢娜。 我是一名探鬼主播挂洛,決...
    沈念sama閱讀 40,819評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼眠砾!你這毒婦竟也來(lái)了虏劲?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,725評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤褒颈,失蹤者是張志新(化名)和其女友劉穎柒巫,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體谷丸,經(jīng)...
    沈念sama閱讀 46,268評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡堡掏,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,356評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了刨疼。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片泉唁。...
    茶點(diǎn)故事閱讀 40,488評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖揩慕,靈堂內(nèi)的尸體忽然破棺而出亭畜,到底是詐尸還是另有隱情,我是刑警寧澤迎卤,帶...
    沈念sama閱讀 36,181評(píng)論 5 350
  • 正文 年R本政府宣布拴鸵,位于F島的核電站,受9級(jí)特大地震影響止吐,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜侨糟,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,862評(píng)論 3 333
  • 文/蒙蒙 一碍扔、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧秕重,春花似錦不同、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,331評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)服鹅。三九已至,卻和暖如春百新,著一層夾襖步出監(jiān)牢的瞬間企软,已是汗流浹背智厌。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,445評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工逐样, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人劫侧。 一個(gè)月前我還...
    沈念sama閱讀 48,897評(píng)論 3 376
  • 正文 我出身青樓铅辞,卻偏偏與公主長(zhǎng)得像厌漂,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子斟珊,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,500評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理苇倡,服務(wù)發(fā)現(xiàn),斷路器囤踩,智...
    卡卡羅2017閱讀 134,696評(píng)論 18 139
  • 站在前輩的肩膀上前行 UIKit框架和Foundation框架 所有的Mac OS X和IOS程序都是由大量的對(duì)象...
    zysmoon閱讀 8,703評(píng)論 0 16
  • Ubuntu的發(fā)音 Ubuntu,源于非洲祖魯人和科薩人的語(yǔ)言怔锌,發(fā)作 oo-boon-too 的音寥粹。了解發(fā)音是有意...
    螢火蟲(chóng)de夢(mèng)閱讀 99,353評(píng)論 9 467
  • 一、iOS中的沙盒機(jī)制 iOS應(yīng)用程序只能對(duì)自己創(chuàng)建的文件系統(tǒng)讀取文件埃元,這個(gè)獨(dú)立涝涤、封閉、安全的空間岛杀,叫做沙盒阔拳。它一...
    1d5cb7cff98d閱讀 1,779評(píng)論 0 0
  • 左手捂心 右手執(zhí)筆 寫(xiě)下思念的詩(shī) 寄給最?lèi)?ài)的你 時(shí)間為筆 月光為箋 清風(fēng)鴻雁為信使 為你寫(xiě)一封最長(zhǎng)情的告白 黑夜中...
    漠北滄海閱讀 164評(píng)論 0 0