慕課網_《iOS基礎教程-文件操做》學習總結

時間:2017年06月06日星期二
說明:本文部份內容均來自慕課網。@慕課網:http://www.imooc.com
教學示例源碼:無
我的學習源碼:https://github.com/zccodere/s...ios

第一章:學習指南

1-1 學習指南

應用需求git

clipboard.png

學習目標github

1.文件讀寫的應用場景
2.瞭解iOS的文件存儲機制
3.使用基本的文件讀寫進行開發

第二章:沙盒介紹

2-1 沙盒介紹

沙盒機制示意圖函數

clipboard.png

應用只能訪問本身應用目錄下的文件。
沙盒機制學習

1.Documents:程序建立或應用瀏覽產生的文件數據
2.Library:程序的默認設置或狀態信息保存在該目錄
3.tmp:提供一個即時建立臨時文件的地方,但不須要持久化

文件目錄示意圖測試

clipboard.png

路徑處理【重點】atom

1.沙盒路徑的處理
2.NSString類路徑函數的處理
3.關於NSData

2-2 獲取Documents路徑

代碼演示: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;
}

2-3 獲取Library和Tmp路徑

代碼演示: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;
}

第三章:數據的轉換

3-1 NSString類的路徑函數的處理

代碼演示: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);
}

3-2 NSData數據轉換

代碼演示:

// 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);
    
}

第四章:文件操做詳解

4-1 使用NSFileManager建立文件夾

文件操做函數

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(@"文件建立失敗");
    }
}

4-2 寫入文件

代碼演示:

// 寫入文件
- (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(@"文件寫入失敗");
    }
    
}

4-3 追加文件內容

代碼演示:

// 追加文件內容
- (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];
}

4-4 刪除文件

代碼演示:

// 判斷指定文件是否存在
- (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;
    }
}

第五章:實例講解

5-1 實例操做

實例說明

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];
}

第六章:課程總結

6-1 課程總結

課程回顧

應用場景
沙盒機制
路徑處理
文件處理實例

本節課程完整代碼

//
//  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
相關文章
相關標籤/搜索