時間:2017年06月06日星期二
說明:本文部份內容均來自慕課網。@慕課網:http://www.imooc.com
教學示例源碼:無
我的學習源碼:https://github.com/zccodere/s...ios
應用需求git
學習目標github
1.文件讀寫的應用場景 2.瞭解iOS的文件存儲機制 3.使用基本的文件讀寫進行開發
沙盒機制示意圖函數
應用只能訪問本身應用目錄下的文件。
沙盒機制學習
1.Documents:程序建立或應用瀏覽產生的文件數據 2.Library:程序的默認設置或狀態信息保存在該目錄 3.tmp:提供一個即時建立臨時文件的地方,但不須要持久化
文件目錄示意圖測試
路徑處理【重點】atom
1.沙盒路徑的處理 2.NSString類路徑函數的處理 3.關於NSData
代碼演示:spa
// 獲取沙盒的路徑 - (NSString *)getHomePath{ NSString *homePath = NSHomeDirectory(); NSLog(@"HomePath = %@",homePath); return homePath; } // 獲取 Documents 路徑 - (NSString *)getDocumentsPath{ // 在應用中檢索指定的路徑 // 第一個參數:搜索的路徑名稱 // 第二個參數:限定在沙盒內 NSArray *docPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentPath = [docPaths lastObject]; NSLog(@"DocumentPath = %@",documentPath); return documentPath; }
代碼演示:code
// 獲取 Library 路徑 - (NSString *)getLibraryPath{ NSArray *libPaths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES); NSString *libraryPath = [libPaths firstObject]; NSLog(@"LibraryPath = %@",libraryPath); return libraryPath; } // 獲取 Tmp 路徑 - (NSString *)getTmpPath{ NSString *tmpPath = NSTemporaryDirectory(); NSLog(@"TmpPath = %@",tmpPath); return tmpPath; }
代碼演示:blog
// NSString 類的路徑函數的處理 - (void)parsePath { NSString *path = @"/data/Containers/Data/Application/test.png"; // 得到路徑的各個組成部分 NSArray *array = [path pathComponents]; NSLog(@"PathComponents = %@",array); // 提取路徑的最後一個組成部分 NSString *name = [path lastPathComponent]; NSLog(@"FileName = %@",name); // 刪除路徑的最後一個組成部分 NSString *string = [path stringByDeletingLastPathComponent]; NSLog(@"LastPath = %@",string); // 追加 name.txt NSString *addString = [string stringByAppendingPathComponent:@"name.txt"]; NSLog(@"AddString = %@",addString); }
代碼演示:
// NSData 數據轉換 - (void) dataChange:(NSData *)data { // NSData -> NSString NSString *aString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; // NSString -> NSData NSData *aData = [aString dataUsingEncoding:NSUTF8StringEncoding]; // NSData -> UIImage UIImage *image = [UIImage imageWithData:aData]; // UIImage -> NSData NSData *data2 = UIImagePNGRepresentation(image); NSLog(@"%@",data2); }
文件操做函數
1.NSFileHandle類主要對文件內容進行讀取和寫入操做 2.NSFileManager類主要對文件的操做(刪除、建立等等)
代碼演示:
// 建立文件夾 - (void)createFolder { NSString *docPath = [self getDocumentsPath]; NSString *testPath = [docPath stringByAppendingPathComponent:@"慕課網"]; NSFileManager *manager = [NSFileManager defaultManager]; // withIntermediateDirectories YES 能夠覆蓋 NO 不能夠覆蓋 BOOL result = [manager createDirectoryAtPath:testPath withIntermediateDirectories:YES attributes:nil error:nil]; if (result) { NSLog(@"文件夾建立成功"); } else{ NSLog(@"文件夾建立失敗"); } } // 建立文件 - (void)createFile { NSString *docPath = [self getDocumentsPath]; NSString *dirPath = [docPath stringByAppendingPathComponent:@"慕課網"]; NSString *filePath = [dirPath stringByAppendingPathComponent:@"個人筆記.txt"]; NSFileManager *manager = [NSFileManager defaultManager]; BOOL result = [manager createFileAtPath:filePath contents:nil attributes:nil]; if (result) { NSLog(@"文件建立成功"); } else{ NSLog(@"文件建立失敗"); } }
代碼演示:
// 寫入文件 - (void)writeFile { NSString *docPath = [self getDocumentsPath]; NSString *dirPath = [docPath stringByAppendingPathComponent:@"慕課網"]; NSString *filePath = [dirPath stringByAppendingPathComponent:@"個人筆記.txt"]; NSString *content = @"測試寫筆記"; BOOL result = [content writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:nil]; if (result) { NSLog(@"文件寫入成功"); } else{ NSLog(@"文件寫入失敗"); } }
代碼演示:
// 追加文件內容 - (void) addFileContent{ NSString *docPath = [self getDocumentsPath]; NSString *dirPath = [docPath stringByAppendingPathComponent:@"慕課網"]; NSString *filePath = [dirPath stringByAppendingPathComponent:@"個人筆記.txt"]; // 打開文件,準備更新 NSFileHandle *fileHandle = [NSFileHandle fileHandleForUpdatingAtPath:filePath]; // 將節點跳到文件的末尾 [fileHandle seekToEndOfFile]; NSString *addContent = @"這是我要追加上去的內容"; NSData *addContentData = [addContent dataUsingEncoding:NSUTF8StringEncoding]; // 寫入數據 [fileHandle writeData:addContentData]; // 關閉文件 [fileHandle closeFile]; }
代碼演示:
// 判斷指定文件是否存在 - (BOOL)fileExist:(NSString *)filePath{ NSFileManager *manager = [NSFileManager defaultManager]; if([manager fileExistsAtPath:filePath]){ return YES; } return NO; } // 刪除文件 - (void)removeFile{ NSString *docPath = [self getDocumentsPath]; NSString *dirPath = [docPath stringByAppendingPathComponent:@"慕課網"]; NSString *filePath = [dirPath stringByAppendingPathComponent:@"個人筆記.txt"]; NSFileManager *manager = [NSFileManager defaultManager]; BOOL isExist = [self fileExist:filePath]; if(isExist){ BOOL result = [manager removeItemAtPath:filePath error:nil]; if (result) { NSLog(@"文件刪除成功"); }else{ NSLog(@"文件刪除失敗"); } }else{ NSLog(@"文件不存在。文件路徑 = %@",filePath); return; } }
實例說明
1.獲取圖片存入本地指定文件夾 2.去讀本地指定文件夾圖片進行展現【課後練習】
代碼演示:
// 寫入圖片 - (void)writeImage{ UIImage *testImage = [UIImage imageNamed:@"1.jpg"]; NSData *imageData = UIImagePNGRepresentation(testImage); NSString *docPath = [self getDocumentsPath]; NSString *dirPath = [docPath stringByAppendingPathComponent:@"慕課網"]; NSString *filePath = [dirPath stringByAppendingPathComponent:@"圖片"]; [imageData writeToFile:filePath atomically:YES]; }
課程回顧
應用場景 沙盒機制 路徑處理 文件處理實例
本節課程完整代碼
// // ViewController.m // MyPathFunc // // Created by zc on 2017/6/6. // Copyright © 2017年 com.zccoder. All rights reserved. // #import "ViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. // [self getHomePath]; // [self getDocumentsPath]; // [self getLibraryPath]; // [self getTmpPath]; // [self parsePath]; // [self createFolder]; // [self createFile]; // [self writeFile]; // [self addFileContent]; // [self removeFile]; [self writeImage]; } // 獲取沙盒的路徑 - (NSString *)getHomePath{ NSString *homePath = NSHomeDirectory(); NSLog(@"HomePath = %@",homePath); return homePath; } // 獲取 Documents 路徑 - (NSString *)getDocumentsPath{ // 在應用中檢索指定的路徑 // 第一個參數:搜索的路徑名稱 // 第二個參數:限定在沙盒內 NSArray *docPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentPath = [docPaths lastObject]; NSLog(@"DocumentPath = %@",documentPath); return documentPath; } // 獲取 Library 路徑 - (NSString *)getLibraryPath{ NSArray *libPaths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES); NSString *libraryPath = [libPaths firstObject]; NSLog(@"LibraryPath = %@",libraryPath); return libraryPath; } // 獲取 Tmp 路徑 - (NSString *)getTmpPath{ NSString *tmpPath = NSTemporaryDirectory(); NSLog(@"TmpPath = %@",tmpPath); return tmpPath; } // NSString 類的路徑函數的處理 - (void)parsePath { NSString *path = @"/data/Containers/Data/Application/test.png"; // 得到路徑的各個組成部分 NSArray *array = [path pathComponents]; NSLog(@"PathComponents = %@",array); // 提取路徑的最後一個組成部分 NSString *name = [path lastPathComponent]; NSLog(@"FileName = %@",name); // 刪除路徑的最後一個組成部分 NSString *string = [path stringByDeletingLastPathComponent]; NSLog(@"LastPath = %@",string); // 追加 name.txt NSString *addString = [string stringByAppendingPathComponent:@"name.txt"]; NSLog(@"AddString = %@",addString); } // NSData 數據轉換 - (void) dataChange:(NSData *)data { // NSData -> NSString NSString *aString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; // NSString -> NSData NSData *aData = [aString dataUsingEncoding:NSUTF8StringEncoding]; // NSData -> UIImage UIImage *image = [UIImage imageWithData:aData]; // UIImage -> NSData NSData *data2 = UIImagePNGRepresentation(image); NSLog(@"%@",data2); } // 建立文件夾 - (void)createFolder { NSString *docPath = [self getDocumentsPath]; NSString *testPath = [docPath stringByAppendingPathComponent:@"慕課網"]; NSFileManager *manager = [NSFileManager defaultManager]; // withIntermediateDirectories YES 能夠覆蓋 NO 不能夠覆蓋 BOOL result = [manager createDirectoryAtPath:testPath withIntermediateDirectories:YES attributes:nil error:nil]; if (result) { NSLog(@"文件夾建立成功"); } else{ NSLog(@"文件夾建立失敗"); } } // 建立文件 - (void)createFile { NSString *docPath = [self getDocumentsPath]; NSString *dirPath = [docPath stringByAppendingPathComponent:@"慕課網"]; NSString *filePath = [dirPath stringByAppendingPathComponent:@"個人筆記.txt"]; NSFileManager *manager = [NSFileManager defaultManager]; BOOL result = [manager createFileAtPath:filePath contents:nil attributes:nil]; if (result) { NSLog(@"文件建立成功"); } else{ NSLog(@"文件建立失敗"); } } // 寫入文件 - (void)writeFile { NSString *docPath = [self getDocumentsPath]; NSString *dirPath = [docPath stringByAppendingPathComponent:@"慕課網"]; NSString *filePath = [dirPath stringByAppendingPathComponent:@"個人筆記.txt"]; NSString *content = @"測試寫筆記"; BOOL result = [content writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:nil]; if (result) { NSLog(@"文件寫入成功"); } else{ NSLog(@"文件寫入失敗"); } } // 判斷指定文件是否存在 - (BOOL)fileExist:(NSString *)filePath{ NSFileManager *manager = [NSFileManager defaultManager]; if([manager fileExistsAtPath:filePath]){ return YES; } return NO; } // 追加文件內容 - (void) addFileContent{ NSString *docPath = [self getDocumentsPath]; NSString *dirPath = [docPath stringByAppendingPathComponent:@"慕課網"]; NSString *filePath = [dirPath stringByAppendingPathComponent:@"個人筆記.txt"]; // 打開文件,準備更新 NSFileHandle *fileHandle = [NSFileHandle fileHandleForUpdatingAtPath:filePath]; // 將節點跳到文件的末尾 [fileHandle seekToEndOfFile]; NSString *addContent = @"這是我要追加上去的內容"; NSData *addContentData = [addContent dataUsingEncoding:NSUTF8StringEncoding]; // 寫入數據 [fileHandle writeData:addContentData]; // 關閉文件 [fileHandle closeFile]; } // 刪除文件 - (void)removeFile{ NSString *docPath = [self getDocumentsPath]; NSString *dirPath = [docPath stringByAppendingPathComponent:@"慕課網"]; NSString *filePath = [dirPath stringByAppendingPathComponent:@"個人筆記.txt"]; NSFileManager *manager = [NSFileManager defaultManager]; BOOL isExist = [self fileExist:filePath]; if(isExist){ BOOL result = [manager removeItemAtPath:filePath error:nil]; if (result) { NSLog(@"文件刪除成功"); }else{ NSLog(@"文件刪除失敗"); } }else{ NSLog(@"文件不存在。文件路徑 = %@",filePath); return; } } // 寫入圖片 - (void)writeImage{ UIImage *testImage = [UIImage imageNamed:@"1.jpg"]; NSData *imageData = UIImagePNGRepresentation(testImage); NSString *docPath = [self getDocumentsPath]; NSString *dirPath = [docPath stringByAppendingPathComponent:@"慕課網"]; NSString *filePath = [dirPath stringByAppendingPathComponent:@"圖片"]; [imageData writeToFile:filePath atomically:YES]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end