iOS開發-檔案操作,ios開發操作
目錄操作和檔案管理
學習目標
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檔案,不能讀取其他格式的檔案。