目錄操作和文件管理 學習目標 1.理解單例 2.掌握NSFileManager類常用的文件管理操 3.掌握NSFileHandle類常用的文件數據操作 4.瞭解NSData類的常用操作 5.掌握Plist文件讀寫 —————————————————————— 通常程式在運行中或者程式結束之後,需要保 ...
目錄操作和文件管理
學習目標
1.理解單例
2.掌握NSFileManager類常用的文件管理操
3.掌握NSFileHandle類常用的文件數據操作
4.瞭解NSData類的常用操作
5.掌握Plist文件讀寫
——————————————————————
通常程式在運行中或者程式結束之後,需要保存一些信息,而且需要持久化存儲信息,比如登陸信息、視頻播放記錄、收藏記錄等等,那麼我們可以採用以下幾種方式對數據進行持久化保存.
1.1單例模式(當前對象有且僅有一個實例)
好處:只有一個實例,數據共用。
單例模式是一種常用的設計模式。在應用這個模式時,
單例對象的類必須保證只有一個實例存在,而且自行實例化並向整個
系統提供這個實例。如果希望在系統中某個類的對象只能存在一個,
單例模式是最好的解決方案。
其實單例類似C語言中的全局變數
在整個程式聲明周期內,該對象只有一份存在記憶體中
可以在多個對象之間共用數據。
<1>單例創建
(1) 單例的創建方法通常以default/shared/standard 等等開頭
(2) 單例不需要release 或者 autorelease ,因為單例的生命周期為整個程式。
2.方法:
2.1 NSFileManager
<1>創建文件管理器單例對象 [NSFileManager defaultManager] <2>遍歷目錄下的內容 //淺度遍歷當前目錄下的文件 /* contentsOfDirectoryAtPath:要遍歷的路徑 error:錯誤信息 */ NSArray *array = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:path error:&error]; //深度遍歷 array = [fileManger subpathsOfDirectoryAtPath:path error:nil]; <3>判斷文件是否存在 /* 判斷文件是否存在的時候一定要加尾碼。 path中如果有尾碼表示文件,不加尾碼表示文件夾。 */ BOOL isExist = [fileManger fileExistsAtPath:path]; if (isExist) { NSLog(@"存在"); } else { NSLog(@"不存在"); } <4>創建文件和目錄 //創建文件 /* createFileAtPath:要創建文件的路徑 contents:文件內容(NSData類型) attributes:文件屬性,一般為nil,nil表示採用預設屬性。 */ //註意:如果文件已經存在會覆蓋 BOOL createOK = [fileManger createFileAtPath:path contents:nil attributes:nil]; //創建目錄 /* createDirectoryAtPath:要創建的目錄,如果文件夾已經存在不會覆蓋 withIntermediateDirectories:是否有中間目錄 attributes:文件夾的屬性,nil表示預設屬性 error:錯誤信息 */ createOK = [fileManger createDirectoryAtPath:path withIntermediateDirectories:YES attributes:nil error:&error]; <5>拷貝文件/目錄 //目錄與目錄拷貝 [fileManger copyItemAtPath:fromFilePath toPath:toDirPath error:&error]; //文件與文件拷貝 [fileManger copyItemAtPath:fromFilePath toPath:toFilePath error:&error]; <6>移動文件/目錄 [fileManger moveItemAtPath:frompath toPath:toPath error:nil]; <7>刪除文件/目錄 [fileManger removeItemAtPath:toPath error:nil]; <8>獲取文件屬性 NSDictionary *attributes = [fileManger attributesOfItemAtPath:path error:nil]; NSLog(@"文件的屬性:%@",attributes);
2.2 NSData(二進位數據)
<1>把NSString轉換為NSData
NSData *data = [string dataUsingEncoding:
NSUTF8StringEncoding]
<2>把NSData轉換為NSString
NSString *convertString = [[NSString alloc]
initWithData:data encoding:NSUTF8StringEncoding]
2.3 NSFileHandle(文件句柄類)
對文件進行讀寫首先需要NSFileHandle打開文件,
NSFileHandle對文件進行讀寫都是NSData類型的二進位數據.
<1>打開文件方法 //只讀的句柄 NSFileHandle *readOnlyHandle = [NSFileHandle fileHandleForReadingAtPath:path]; //只寫的句柄 NSFileHandle *writeOnlyHandle = [NSFileHandle fileHandleForWritingAtPath:path]; //讀寫句柄 NSFileHandle *readAndWriteHandle = [NSFileHandle fileHandleForUpdatingAtPath:path]; <2>讀指定長度的數據(單位為位元組) //讀取5個位元組數據 NSData *data = [readOnlyHandle readDataOfLength:5]; <3>從當前偏移量讀到文件尾 [readOnlyHandle readDataToEndOfFile] [readAndWriteHandle readDataToEndOfFile] <4>設置文件偏移量(單位為位元組) [readOnlyHandle seekToFileOffset:偏移的位元組數]; <5>將文件偏移量定位到文件尾 [readOnlyHandle seekToEndOfFile]; <6>寫文件(不覆蓋的時候需要設置偏移量) //1.先把偏移量指到文件尾部 [readAndWriteHandle seekToEndOfFile]; //2.寫入到指定路徑 [readAndWriteHandle writeData:[@"abcdef" dataUsingEncoding:NSUTF8StringEncoding]]; <7>關閉文件句柄 //關閉文件句柄,關閉後(不需要)就不能再操作文件了 [readAndWriteHandle closeFile]; [readOnlyHandle closeFile]; [writeOnlyHandle closeFile];
3 Plist
<1> 什麼是plist文件, plist文件的作用
1.plist文件:property list 屬性列表文件,文件的內容只能是 NSString,NSNumber,NSDate,NSData,NSArray,NSDictionary類的對象內容,不能保存其他類型數據
2.作用:對一些登陸註冊信息或者程式的配置信息(小數據)進行持久化存儲
<2> 如何創建plist文件, 如何編輯plist文件
Plist文件內容的格式是XML語法格式
1.Xcode創建
1.點擊右鍵—>New File 彈出一對話框
2.iOS程式選中iOS欄中的Resource或者Mac程式選中OS X 欄中的resource
3.點擊Resource中的Property List 創建plist文件
4.點擊文件中的'+'可以添加數據
2.代碼創建
如果要把 NSString NSNumber NSDate NSData NSArray NSDictionary 的對象寫入文件一般就用plist文件
我們需要這些數據保存到一個數組或者字典中,然後調用數組和字典的相關函數把數 組NSArray或者字典NSDictionary寫入plist文件
//NSArray和NSDictionary寫文件方法
- (BOOL)writeToFile:(NSString *)path atomically:
(BOOL)useAuxiliaryFile;
<3> 如何在程式中讀取plist文件數據
Plist文件的根節點(數據的最外層)通常是數組或者字典
如果Plist文件的根節點是字典那麼使用字典的類方法
+ (id)dictionaryWithContentsOfFile:(NSString *)path;
讀寫Plist文件
如果根節點是數組那麼使用數組的類方法
+ (id)arrayWithContentsOfFile:(NSString *)path;
讀取Plist文件。
註:上述兩個方法只能讀取Plist文件,不能讀取其他格式的文件。