@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”是錯誤的蓖捶,加載文件會失敗地回。
(網上看到的轉載,大神們有何建議來 講講 相互討論一下)