iOS 中文件管理器的使用

援引:https://www.jianshu.com/p/1ee2619137f9ios

文章以前,咱們先來看下本文的知識大綱:git


 
ios中文件管理器的使用.png

1.NSFileManager和NSFilehandle的概念

1.NSFileManager 是 Foundation 框架中用來管理和操做文件、目錄等文件系統相關聯內容的類。
2.NSFileHandle類:它須要配合NSFileManager文件管理類,對文件內容進行操做,寫入數據、讀取數據。
2.NSFileManager和NSFileHandle的配合使用,實現文件的增刪改查等功能

2.1 拿到沙盒的Document路徑(一般默認放在這個路徑下)

// 拿到沙盒路徑
-(NSString*)getDocumentPath
{
    // @expandTilde 是否覆蓋
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
                                                       NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    return documentsDirectory;
       
}
2.2 建立文件夾,而且判斷是否建立成功

 NSString *documentsPath =[self getDocumentPath];
 NSFileManager *fileManager = [NSFileManager defaultManager];// NSFileManager 是 Foundation 框架中用來管理和操做文件、目錄等文件系統相關聯內容的類。
 NSString * testDirectory = [documentsPath stringByAppendingPathComponent:@"日記"];
 BOOL res = [fileManager createDirectoryAtPath:testDirectory withIntermediateDirectories:YES attributes:nil error:nil];
    
        if (res) {
            NSLog(@"文件夾建立成功");
        }else
        {
            NSLog(@"文件夾建立失敗");
        }

2.3 建立文件,並判斷文件是否建立

    NSString *testPath = [testDirectory stringByAppendingPathComponent:@"test.txt"];
    BOOL res1 = [fileManager createFileAtPath:testPath contents:nil attributes:nil];
    if (res1) {
        NSLog(@"文件建立成功: %@" ,testPath);
    }else
    {
        NSLog(@"文件建立失敗");
    }
2.4 寫入文件,並判斷文件是否存在

   NSString * str = @"你是一位好同志";
   BOOL res2 = [str writeToFile:testPath atomically:YES encoding:NSUTF8StringEncoding error:nil];
    if (res2) {
        NSLog(@"文件寫入成功");
    }else
    {
        NSLog(@"文件寫入失敗");
     }
// 判斷文件是否存在
    if ([fileManager fileExistsAtPath:testPath]) {
        NSLog(@" 是否存在 ");
    }
2.5 追加寫入內容

    // 追加內容
    NSFileHandle * handFile = [NSFileHandle fileHandleForUpdatingAtPath:testPath]; //NSFileHandle類:它須要配合NSFileManager文件管理類,對文件內容進行操做,寫入數據、讀取數據。
    [handFile seekToEndOfFile];// 文件光標移動末尾
    NSString * str1 = @"追加內容";// 追加內容
    NSData * data = [str1 dataUsingEncoding:NSUTF8StringEncoding];// 轉換文件格式
    [handFile writeData:data];// 寫入文件
    [handFile closeFile];// 關閉

2.6 刪除文件,並判斷文件是否刪除

// 刪除文件
      BOOL isOK = [fileManager removeItemAtPath:testPath error:nil];
    if (isOK) {
        NSLog(@"-- 成功刪除---");
    }
2.7 拷貝文件

// 拷貝文件
    NSString *targetPath = [testDirectory stringByAppendingPathComponent:@"test1.txt"]; //目標文件路徑
    [fileManager copyItemAtPath:testPath toPath:targetPath error:nil]; // 拷貝文件
2.8 移動文件

   [fileManager moveItemAtPath:testPath toPath:targetPath error:nil];
2.9 讀取文件

NSString * content = [NSString stringWithContentsOfFile:testPath encoding:NSUTF8StringEncoding error:nil];
NSLog(@"拿到文章的內容  -- %@",content);
2.10 計算文件大小

// 計算文件大小
- (unsigned long long)fileSizeAtPath:(NSString *)filePath {
    NSFileManager *fileManager = [NSFileManager defaultManager];
    BOOL isExist = [fileManager fileExistsAtPath:filePath];
    if (isExist) {
        unsigned long long fileSize = [[fileManager attributesOfItemAtPath:filePath error:nil] fileSize];
        return fileSize;
    } else {
        NSLog(@"file is not exist");
        return 0;
    }
}

2.11 計算文件夾大小

// 計算整個文件夾中全部文件大小
- (unsigned long long)folderSizeAtPath:(NSString*)folderPath {
    NSFileManager *fileManager = [NSFileManager defaultManager];
    BOOL isExist = [fileManager fileExistsAtPath:folderPath];
    if (isExist) {
        NSEnumerator *childFileEnumerator = [[fileManager subpathsAtPath:folderPath] objectEnumerator];
        unsigned long long folderSize = 0;
        NSString *fileName = @"";
        while ((fileName = [childFileEnumerator nextObject]) != nil){
            NSString* fileAbsolutePath = [folderPath stringByAppendingPathComponent:fileName];
            folderSize += [self fileSizeAtPath:fileAbsolutePath];
        }
        return folderSize / (1024.0 * 1024.0);
    } else {
        NSLog(@"file is not exist");
        return 0;
    }
}
3.NSString、UIImage 和 NSData的相互轉換
3.1 NSString 和 NSData轉換

    NSString * string = @"123456";
    NSData * data = [string dataUsingEncoding:NSUTF8StringEncoding]; //NSString 轉換爲NSData
    NSString * str = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];////NSData 轉換爲NSString
3.2 UIImage 和 NSData轉換

//NSData轉換爲UIImage
    NSString * imagePath = @"/Users/yyf/Desktop/ios中文件管理器的使用.png";
    NSData *imageData = [NSData dataWithContentsOfFile: imagePath];
    UIImage *image = [UIImage imageWithData: imageData];
    //UIImage轉換爲NSData
    NSData *imageData1 = UIImagePNGRepresentation(image);
3.路徑各個分段的查詢

    NSString * path = @"/Doc/work/diary";
    NSArray * array = [path pathComponents];//文件的各個部分
    NSString * lastName = [path lastPathComponent];//文件的最後一個部分
    NSString * deleteName = [path stringByDeletingLastPathComponent];// 文件刪除最後一個部分
    NSString * appendName = [path stringByAppendingPathComponent:@"cy.jpg"];// 文件追加一個部分
    NSLog(@"得到全部文件%@\n 得到最後文件%@\n 刪除以後的名稱%@\n追加名稱%@\n",array,lastName,deleteName,appendName);

 

附上代碼地址:github

Demo地址
[end]
關於ios中文件管理器的使用介紹到這裏。app

相關文章
相關標籤/搜索