zoukankan      html  css  js  c++  java
  • iOS 中文件管理器的使用

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

    文章之前,我们先来看下本文的知识大纲:


     
    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(@"获得所有文件%@
     获得最后文件%@
     删除之后的名称%@
    追加名称%@
    ",array,lastName,deleteName,appendName);

    附上代码地址:

    Demo地址
    [end]
    关于ios中文件管理器的使用介绍到这里。

  • 相关阅读:
    P1351 联合权值
    c++ 贪心讲解大礼包
    取石子 找规律
    树 dfs暴力判环 题意转化
    P2519 [HAOI2011]problem a
    P1640 [SCOI2010]连续攻击游戏 二分图最大匹配 匈牙利算法
    P2756 飞行员配对方案问题 二分图匹配 匈牙利算法
    cogs 49. 跳马问题 DFS dp
    cogs 2. 旅行计划 dijkstra+打印路径小技巧
    cogs 1440. [NOIP2013]积木大赛 贪心水题
  • 原文地址:https://www.cnblogs.com/gaozhang12345/p/10818774.html
Copyright © 2011-2022 走看看