最近遇到ios上文件讀寫操作的有關知識,記錄下來,以便以后查閱,同時分享與大家。
一,簡單介紹一下常用的plist文件。
全名是:Property List,屬性列表文件,它是一種用來存儲串行化后的對象的文件。屬性列表文件的擴展名為.plist ,因此通常被稱為 plist文件。文件是xml格式的。
Plist文件通常用於儲存用戶設置,也可以用於存儲捆綁的信息
二,先說文件保存到的幾個位置:
1,工程沙盒里(就是程序user Document文件夾下,以讀取文件,寫入文件方式)
2,工程自身里(就是在工程里手動創建一個如.plist文件,把固定的內容寫入,這個需要人工手動寫入)
3,工程沙盒里(保存到user Document下,不過不需要讀寫文件,用系統的 NSUserDefaults 可以快速保存添加讀取刪除基本數據類型,類似於android里的Sharedpreferences )
先看截圖吧
控制台輸出的為工程下plist文件和沙盒文件的路徑,通過截圖我們可以看到,前綴都是統一的,只是到了程序的文件夾后,一個是appname.app,另一個是Documents下。所以存放位置還是不一樣的。
首先說一下,工程下的.plist是我們不能在代碼中寫入的,可以讀取,但是不可以寫入(目前我是這樣的結論,猜測應該是apple為了安全限制的),所以,代碼中進行文件寫等操作只能在沙盒路徑下的文件中操作。
(程序常用固定數據,比如離線地圖數據,各城市經緯度信息等需要我們綁定到程序里(比UserDocument安全),那么,可以代碼循環寫入,把.plist寫在沙盒內,然后手動copy到工程目錄下,這樣就不用我們手動添加啦)
三,三種方式的讀寫操作。
1-1,創建plist文件。
按command +N快捷鍵創建,或者File —> New —> New File,選擇Resource 下的Property List
1-2,工程路徑plist文件讀取。
- //path 讀取當前程序定義好的provinces.plist省份城市文件
- NSString *path = [[NSBundle mainBundle] pathForResource:@"provinces" ofType:@"plist"];
- NSDictionary *data = [NSDictionary dictionaryWithContentsOfFile:path];
- self.provincesContent = [NSArray arrayWithArray:[data objectForKey:@"province"]];//array數組的名稱就叫province
1-3,讀取后賦值給我們相應的數據類型,就可以直接使用了,就是這么簡單。
2-1,沙盒路徑plist文件的讀取。
- NSArray *patharray = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
- NSString *path = [patharray objectAtIndex:0];
- NSString *filepath=[path stringByAppendingPathComponent:@"provinces.plist"];//添加我們需要的文件全稱
- //獲取此路徑下的我們需要的數據(NSArray,NSDictionary,NSString...)
- NSMutableArray *rootArray = [NSMutableArray arrayWithContentsOfFile:filepath];//注意,如果想添加新的數據,需要NSMutable類型的
2-2,如果document里沒有此文件,會自動創建,讀取賦值后,便可使用,同時可以add,update,和remove,具體看上面的截圖,一目了然。
3-1,NSUserDefaults快速讀寫,利用系統提供的方法,我們可以快速保存簡單數據類型,如用戶登錄用戶名密碼。
- NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];//獲取標准函數對象
- NSMutableDictionary *defaultcoordinate = [defaults objectForKey:@"default_coordinate"];//通過對象獲取名稱下NSMutableDictionary數據
- NSString *currentCity = [defaultcoordinate objectForKey:@"c_name"];
3-2,增刪改,一看便會。
- [defaults setObject:@"kaka" forKey:@"newdata"];//添加id對象類型數據
- [defaults objectForKey:@"newdata"];//獲取對象類型數據
- [defaults setDouble:2013 forKey:@"double"];//添加double類型數據
- [defaults doubleForKey:@"double"];//獲取double類型數據
- [defaults setBool:NO forKey:@"BOOL"];//添加BOOL類型數據
- [defaults boolForKey:@"BOOL"];//獲取BOOL類型數據
- [defaults setInteger:12 forKey:@"int"];//添加int類型數據
- [defaults integerForKey:@"int"];//獲取int類型數據
- [defaults setFloat:0.23 forKey:@"float"];//添加Float類型數據
- [defaults floatForKey:@"float"];//獲取float類型數據
- [defaults removeObjectForKey:@"newdata"];//刪除對象數據
3-3,操作之后記得Synchronize同步操作,否則偶然會因為別的線程占大量內存而沒有保存成功
- [defaults synchronize];
四,沙盒文件打開的方法:
1,可以通過 系統帶的 終端工具,在bash命令行模式定位到
2,Finder菜單-前往 此時按住鍵盤的:option按鍵,就會顯示出:資源庫,點擊進入
有關文件操作,先寫到這里,更復雜的NSData或sqlite保存,以后用到,學到時再補充吧。