iOS ——NSFileManager(文件管理)

##一、文件保存的目錄結構 iOS的文件存儲採用的是沙盒目錄機制,沒有SD卡保存的概念。一個APP安裝成功後就會對應一個文件目錄這個目錄就叫沙盒。這個APP的全部文件都會保存在這個目錄中,每一個APP沙盒獨立互相不能訪問目錄,沙盒目錄中包含Documents、Library、Tmp三個子目錄。結構以下:緩存

  • ####應用沙盒路徑:
// NSHomeDirectory() 獲取沙盒目錄
    NSString *homePath = NSHomeDirectory();
    NSLog(@"%@",homePath);
// command + shift + G 能夠前往該文件夾
    /Users/qinglinfu/Library/Developer/CoreSimulator/Devices/039371EC-EC36-40B3-9CB8-3065925EDB7D/data/Containers/Data/Application/55F7965F-0D92-4E88-B422-E423C9A732E1

輸入圖片說明 輸入圖片說明

  • ####Documents目錄: 用於存儲用戶數據,iTunes備份和恢復的時候會包括此目錄,程序建立產生的或在程序中瀏覽保存的文件數據放在該目錄下,本地持久化的數據放在這個目錄中。dom

    directory:要查找的目錄atom

    domainMask:從哪一個主目錄中獲取(一般是沙盒目錄)code

    expandTilde: 是否返回完整的路徑對象

// 獲取目錄路徑的方法
    NSArray<NSString *> *NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory directory, NSSearchPathDomainMask domainMask, BOOL expandTilde);
// NSDocumentDirectory: documents目錄
    // NSUserDomainMask: 當前沙盒目錄
    NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
  • ####Library目錄: 包含兩個子目錄:Caches 和 Preferences。Caches用來緩存的文件。Preferences保存經過NSUserDefaults建立的文件。
NSString *path = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) lastObject];
  • ####Cache目錄: 用於保存應用程序產生的緩存文件,程序須要手動緩存的數據也保存在此目錄。作清理緩存的工做是須要清理這個目錄的內容。
NSString *path = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
  • ####Tmp目錄: 用戶保存應用程序參數的臨時文件,程序關閉後這個目錄中的文件被自動清理掉。
NSString *path = NSTemporaryDirectory();

##二、NSFileManager管理文件目錄圖片

iOS中的文件管理由NSFileManager類實現,負責文件\目錄的增刪改查、獲取數據屬性等。rem

  • ####建立NSFileManager對象
// NSFileManager是一個單例對象,只實例化一次。
    NSFileManager *manager = [NSFileManager defaultManager];
  • ####建立目錄
// 獲取documents目錄,將建立的新目錄保存在該目錄下
    NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
 	
    // 目錄的保存路徑
    NSString *directoryPath = [docPath stringByAppendingPathComponent:@"datas"];
    
    // 使用NSFileManager 建立目錄
    BOOL isSuccess = [manager createDirectoryAtPath:directoryPath withIntermediateDirectories:YES attributes:nil error:nil];
    if (isSuccess) {
     
        NSLog(@"建立成功!");
    } else {
        NSLog(@"建立失敗!");
    }

輸入圖片說明

  • ####建立文件
// 建立文件的保存路徑
    NSString *filePath = [directoryPath stringByAppendingPathComponent:@"userInfo.plist"];
	 
    //使用 NSFileManager 建立文件
    BOOL isSuccess = [manager createFileAtPath:filePath contents:nil attributes:nil];
    if (isSuccess) {
        
        NSLog(@"建立成功!");
    } else {
        NSLog(@"建立失敗!");
    }

輸入圖片說明

  • ####刪除文件
// 使用NSFileManager 移除指定路徑的文件
    BOOL isSuccess = [manager removeItemAtPath:directoryPath error:nil];
    if (isSuccess) {
        
        NSLog(@"刪除文件成功!");
        
    } else {
        
        NSLog(@"刪除文件失敗!");
    }
  • ####寫入數據
// 將字典持久保存到建立的plist文件中
    NSMutableDictionary *info = [NSMutableDictionary dictionary];
    [info setObject:@"2015年10月26日13:05:46" forKey:@"date"];
    [info setObject:@"這個是持久化保存的數據內容" forKey:@"content"];
    // 寫入數據
    BOOL isSuccess = [info writeToFile:filePath atomically:YES];
    if (isSuccess) {
        
        NSLog(@"數據寫入成功!");
    } else {
        NSLog(@"數據寫入失敗!");
    }

輸入圖片說明

  • ####讀取數據
// 從保存的路徑中讀取對應數據類型的數據
    NSDictionary *userInfo = [NSDictionary dictionaryWithContentsOfFile:filePath];
    
    if (userInfo) {
        NSLog(@"%@",userInfo);
        
    } else {
        
        NSLog(@"數據讀取失敗!");
    }
  • ####獲取文件屬性
// 獲取指定單個文件的屬性
    //NSDictionary *infoDic = [manager attributesOfItemAtPath:filePath error:nil];
    // 獲取指定目錄下全部子文件路徑
    NSArray *subPaths = [manager subpathsAtPath:directoryPath];
    // 獲取每一個子文件的屬性
    for (NSString *subPath in subPaths) {
        
        NSString *subPathString = [directoryPath stringByAppendingPathComponent:subPath];
        NSDictionary *fileAttribute = [manager attributesOfItemAtPath:subPathString error:nil];
         NSLog(@"%@",fileAttribute);
    }
// 文件屬性列表
    NSFileCreationDate = "2015-10-28 02:48:44 +0000";
    NSFileExtensionHidden = 0;
    NSFileGroupOwnerAccountID = 80;
    NSFileGroupOwnerAccountName = admin;
    NSFileModificationDate = "2015-10-28 02:48:44 +0000";
    NSFileOwnerAccountID = 501;
    NSFilePosixPermissions = 420;
    NSFileReferenceCount = 1;
    NSFileSize = 327;
    NSFileSystemFileNumber = 14750886;
    NSFileSystemNumber = 16777224;
    NSFileType = NSFileTypeRegular;
相關文章
相關標籤/搜索