NSBundle介紹以及讀取沙盒文件路徑問題

@NSBundle包婆硬,是一種特定的文件類型篮奄,一個主要作用是 獲取Resources文件夾中的資源

bundle是一個目錄,其中包含了程序會使用到的資源. 這些資源包含了如圖像,聲音,編譯好的代碼,nib文件(用戶也會把bundle稱為plug-in). 對應bundle,cocoa提供了類NSBundle.

我們的程序是一個bundle. 在Finder中,一個應用程序看上去和其他文件沒有什么區(qū)別. 但是實際上它是一個包含了nib文件,編譯代碼,以及其他資源的目錄. 我們把這個目錄叫做程序的main bundle幕帆。

[NSBundle mainBundle]是獲得NSBundle的一個單例對象岩榆,次單例對象 已經設置了默認的resourcePath窥翩,也就是你的app打包后的路徑各薇,[NSBundle mainBundle]resourcePath]就是獲得這個完整的打包后的app路徑项贺,但你的test.txt文件并不在這個目錄,而是在app內部峭判,這時就需要拼接路徑字符串[NSString stringWithFormat:@"%@%@%@",[[NSBundle mainBundle]resourcePath],@"/",path];

iOS程序有固定的文件訪問限制开缎,只能在自己的沙盒內。
UIImage *img=[UIImage imageNamed:@“cellicon.png”];
這段代碼從相對路徑加載了一個png圖片資源作為UIImage對象朝抖,沒有任何問題啥箭。因為它在內部已經偷偷得幫你把路徑轉化為相對路徑了,你還不知道吧治宣!

接下來急侥,如果要加載一些自定義格式的文件或者數(shù)據(jù),就會出現(xiàn)相對路徑和絕對路徑的問題侮邀。比如

NSFileHandle *fileHandle=[NSFileHandlefile HandleForReadingAtPath:newPath];

newPath為一個字符串路徑坏怪,這里的路徑你卻不能像上面那樣

NSFileHandle *fileHandle=[NSFileHandle fileHandleForReadingAtPath:@“test.txt”];

這樣系統(tǒng)是找不到文件的,因為這里需要的是文件的絕對路徑绊茧,而@“test.txt”完全是無效的铝宵。

這個時候就需要NSBundle的幫忙了,這個類專門用來負責路徑轉化等等功能那。大家都知道ios項目雖然在xcode下可以創(chuàng)建文件夾結構,但是實際上它是沒有文件結構概念的,所以此時假如要加載放在項目目錄下的test.txt文件捧挺,完整的代碼應該是這樣

方法1:

NSString *newPath=[NSString stringWithFormat:@"%@%@%@",[[NSBundle mainBundle]resourcePath],@"/",path];

NSLog(@“url=%@”,newPath);

NSFileHandle *fileHandle=[NSFileHandlefile HandleForReadingAtPath:newPath];

控制臺輸出app路徑resourcePath:

/Users/zouzouyanghong/Library/Application Support/iPhone Simulator/5.0/Applications/76116A6A-572D-43AE-AE78-17D7A88DCAFC/JFitnessProduct.app

控制臺輸出拼接后完整文件絕對路徑:

/Users/zouzouyanghong/Library/Application Support/iPhone Simulator/5.0/Applications/76116A6A-572D-43AE-AE78-17D7A88DCAFC/JFitnessProduct.app/test.jat

方法2:
NSString *newPath=[[NSBundle mainBundle] pathForResource:@“test” ofType:@“txt”];
NSFileHandle *fileHandle=[NSFileHandle fileHandleForReadingAtPath:newPath];

[[NSBundle mainBundle] pathForResource:@“test” ofType:@“jat”];前面的就不再介紹了朵锣,pathForResource方法有兩個參數(shù),前面這個為文件名,后面那個ofType就是文件類型,也就是文件后綴。
這里把文件名和后綴分開了琴锭,如果這是你得到的是一個完整的文件名如:@“test.txt”,那么你得自己想辦法把文件名和后綴分開了衙传。
@要特別說明决帖,此處的文件后綴是不需要“.”的,如果寫成@“.jat”是錯誤的蓖捶,加載文件會失敗地回。
(網上看到的轉載,大神們有何建議來 講講 相互討論一下)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末腺阳,一起剝皮案震驚了整個濱河市落君,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌亭引,老刑警劉巖绎速,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異焙蚓,居然都是意外死亡纹冤,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進店門购公,熙熙樓的掌柜王于貴愁眉苦臉地迎上來萌京,“玉大人,你說我怎么就攤上這事宏浩≈校” “怎么了?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵比庄,是天一觀的道長求妹。 經常有香客問我,道長佳窑,這世上最難降的妖魔是什么制恍? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮神凑,結果婚禮上净神,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好鹃唯,可當我...
    茶點故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布爱榕。 她就那樣靜靜地躺著,像睡著了一般俯渤。 火紅的嫁衣襯著肌膚如雪呆细。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天八匠,我揣著相機與錄音,去河邊找鬼趴酣。 笑死梨树,一個胖子當著我的面吹牛,可吹牛的內容都是我干的岖寞。 我是一名探鬼主播抡四,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼仗谆!你這毒婦竟也來了指巡?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤隶垮,失蹤者是張志新(化名)和其女友劉穎藻雪,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體狸吞,經...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡勉耀,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了蹋偏。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片便斥。...
    茶點故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖威始,靈堂內的尸體忽然破棺而出枢纠,到底是詐尸還是另有隱情,我是刑警寧澤黎棠,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布晋渺,位于F島的核電站,受9級特大地震影響葫掉,放射性物質發(fā)生泄漏些举。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一俭厚、第九天 我趴在偏房一處隱蔽的房頂上張望户魏。 院中可真熱鬧,春花似錦、人聲如沸叼丑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鸠信。三九已至纵寝,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間星立,已是汗流浹背爽茴。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留绰垂,地道東北人室奏。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像劲装,于是被迫代替她去往敵國和親胧沫。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,446評論 2 348

推薦閱讀更多精彩內容