1.檔案路徑的擷取
- (void)viewDidLoad
{
[super viewDidLoad];
NSString *homeDirectory = NSHomeDirectory();//獲得Home路徑,應用程式全路徑
NSString *fileDirectory = [homeDirectory stringByAppendingPathComponent:@"temp/app_data.plist"];
//NSSearchPathForDirectoriesInDomains檢索路徑的方法
NSArray *pathArray = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentDirectory = [pathArray objectAtIndex:0];
NSString *fileDirectory2 = [documentDirectory stringByAppendingPathComponent:@"file.txt"];
NSString *tempDirectory = NSTemporaryDirectory();
NSString *file = [tempDirectory stringByAppendingPathComponent:@"file.txt"];
}
2.檔案操作
NSFileManager常用的函數:
建立新檔案。
- (BOOL)createFileAtPath:(NSString *)path contents:(NSData *)contents attributes:(NSDictionary *)attributes;
path :需要指定檔案的全路徑;contents,指定檔案的內容;attributes:說明檔案的屬性。該函數的傳回值為布爾型,用來表示建立成功或失敗。
建立路徑。
- (BOOL)createDirectoryAtPath:(NSString *)path attributes:(NSDictionary *)attributes;
刪除檔案。
- (BOOL)removeFileAtPath:(NSString *)path handler:(id)handler
handler:執行fileManager:willProcessPath:和fileManager:shouldProceedAfterError回呼函數。handler也可以被置為nil,這樣當刪除檔案出錯的時候,會終止操作,並返回NO。
以儲存圖片為例,主要用到了NSFileManager(使用這個類,可以很方便地訪問檔案。實現建立、刪除、複製粘貼等)
注意: 1.使用textField的委託方法textFiledShouldReturn:,其協議是UITextFieldDelegate
2. 設定textFileld的delegate屬性
3.設定textFileld的Return Key為Go
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
NSArray *paths= NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *filePath = [paths objectAtIndex:0];
filePath = [filePath stringByAppendingPathComponent:[textField.text lastPathComponent]];
NSLog(@"filePath:%@ ",filePath);
//隱藏檔的全路徑和資料
NSData *imageData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:textField.text]];
if (imageData)
{
UIImage *image = [UIImage imageWithData:imageData];
[imageView setImage:image];
[image release];
//使用NSFileManager對象的createFileAtPath:contents:attributes:方法在指定的位置使用資料建立圖片檔案,如果需要改變檔案的屬性,建立包含對應索引值的NSDictionary對象,傳給attributes。
[[NSFileManager defaultManager] createFileAtPath:filePath contents:imageData attributes:nil];
}
[textField resignFirstResponder];
return YES;
}
檔案存放在Caches路徑下:
3.檔案讀寫
(1)plist檔案的讀寫 (有局限性,只有它支援的資料類型才可以被序列化)
[testArray writeToFile:filePath atomically:YES];
註:最後一個參數:如果是YES,寫入檔案的時候,將不會直接寫入指定路徑,而是會將資料寫入一個“輔助檔案”,寫入成功後,再將輔助檔案複製到指定路徑。這樣的話,實際操作的對象時輔助檔案,從而可以避免原檔案資料受到破壞。雖然可能增大系統的開銷,但是為了保證資料的正確性,還是值得的。建議始終將改值設為YES。
(2)Archiver 歸檔資料的讀寫 (可以儲存複雜的資料對象)
類似“編碼”、“解碼”