美文网首页程序员iOS点点滴滴iOS高级开发
iOS中的文件管理(一)—— NSFileManager基础

iOS中的文件管理(一)—— NSFileManager基础

作者: 指尖书法 | 来源:发表于2017-04-25 23:20 被阅读506次

    最近一直在做文件管理相关的功能,苹果官方提供了一个最主要的接口:NSFileManager,方便在iOS中进行文件管理。本文主要对常用的功能进行整理和归纳,以便学习之用。

    NSFileManager 简介

    • 它是用来管理文件系统的一个类
    • 常用来对文件夹、文件进行相关操作(创建、拷贝、移动、删除等等。。)
    • 采用单例模式,获取方式:
      [NSFileManager defaultManager]

    开始使用

    1. 创建一个单例对象
    NSFileManager *fileManager = [NSFileManager defaultManager];
    
    1. 判断文件是否存在
        filePath : NSString类型 表示一个文件的路径
        BOOL isExists = [fileManager fileExistsAtPath:filePath];
    
    1. 判断目录是否存在
    BOOL isDir;
        [fileManager fileExistsAtPath:filePath isDirectory:&isDir];
        if (isDir) {
            NSLog(@"这是个目录");
        }else {
            NSLog(@"不是目录");
        }
    
    1. 判断文件是否可读、可写、可删除 结果都返回BOOL
    [fileManager isWritableFileAtPath:filePath];
    [fileManager isReadableFileAtPath:filePath];
    [fileManager isDeletableFileAtPath:filePath];
    

    获取

    1. 文件属性
      列出常用的文件属性:

         NSFileAttributeKey const NSFileType; :
         NSFileAttributeType const NSFileTypeDirectory;
         NSFileAttributeType const NSFileTypeRegular;
         NSFileAttributeKey const NSFileSize;
         NSFileAttributeKey const NSFileModificationDate;  //修改时间
         NSFileAttributeKey const NSFileCreationDate; //创建时间
      

    剩下的在官方文档中查询。

    1. 获取文件属性的两种方式
      (1))attributesOfItem方法获取单个文件的属性字典。
      /**
      获取文件属性

        @param path 文件路径
        @param error 错误信息
        @return 返回一个属性字典
        */
       - (nullable NSDictionary<NSFileAttributeKey, id> *)attributesOfItemAtPath:(NSString *)path error:(NSError **)error;
      

    (2)利用文件遍历器获取一个文件夹中所有文件的属性(这个方法是我这次项目使用的关键数据源方法)
    //文件属性遍历器
    NSDirectoryEnumerator *enumerator = [fileManager enumeratorAtPath:path];

        //遍历属性
        NSString *fileName;
        //下面这个方法最为关键 可以给fileName赋值,获得文件名(带文件后缀)。
        while (fileName = [enumerator nextObject]) {
            //跳过子路径
            [enumerator skipDescendants];
            //获取文件属性
            //enumerator.fileAttributes 的后面可以用点语法点出许多许多的属性。
            NSLog(@"%@",enumerator.fileAttributes);
        }
    
    1. 获取文件列表
      如果单单获取文件列表名,有个直接的方法:
      - (nullable NSArray<NSString *> *)contentsOfDirectoryAtPath:(NSString *)path error:(NSError **)error;
      但如果还需要其他操作,就用下面两个方法更为科学:
    • 第6点中的enumerator就可以很好的获取文件列表(当然也可以递归到子目录中),而且还能获取到属性,一举两得。所以我在项目中主要用的就是那个方法。当然还有其他方法:
    • 第二种
      a.获取指定目录下以及子目录的所有文件夹和文件路径。
      [fileManager subpathsAtPath:filePath];
      b.获取指定目录下的所有文件夹和文件的路径
      [fileManager subpathsOfDirectoryAtPath: filePath error:nil];
      有了这两个方法,再遍历路径数组,结合获取属性的那个方法,就可以完整获得多个文件属性字典。
      当然,还是我所用的那个方法更为简便O(∩_∩)O。

    创建与编辑

    1. 创建目录
      一般在判断了目录是否存在之后,若不存在,就会创建一个目录:
      /**
      创建目录

        @param path 路径
        @param createIntermediates YES/NO 创建路径的时候,YES自动创建路径中缺少的目录,NO的不会创建缺少的目录
        @param attributes 属性的字典
        @param error 错误对象
        @return 返回是否成功
        */
       - (BOOL)createDirectoryAtPath:(NSString *)path withIntermediateDirectories:(BOOL)createIntermediates attributes:(nullable NSDictionary<NSString *, id> *)attributes error:(NSError **)error;
      
    2. 创建文件
      [fileManager createFileAtPath:createDirPath contents:data attributes:nil];

    3. 拷贝
      [fileManager copyItemAtPath:createDirPath toPath:targetPath error:nil];

    • 移动、重命名(重命名本质上就是移动文件到一个新的路径)
      [fm moveItemAtPath:createDirPath toPath:targetPath error:nil];
    • 删除
      [fm removeItemAtPath:targetPath error:nil];

    下一篇文章,我会分享在具体使用中的注意点和一些小技巧(如在控制器中的显示、文件排序、大图标、文件预览等等)。

    相关文章

      网友评论

        本文标题:iOS中的文件管理(一)—— NSFileManager基础

        本文链接:https://www.haomeiwen.com/subject/zryqzttx.html