zoukankan      html  css  js  c++  java
  • ios 存储学习笔记

    一、主要路径:

    Library/Caches/
    此文件用于存储那些需要及可延迟或重创建的临时数据.且这些内容不会被IOS 系统
    备份,特别地,当设备磁盘空间不足且应用不在运行状态时,IOS 系统可能会移除此文件
    夹中的内容!所以,不要让你的应用太依赖此文件夹中的内容;

    tmp/
    此文件夹包含应用创建,下载等产生的临时文件.IOS系统不会备份此文件夹中的内容。

    二、获取路径的方法:

    NSFileManager *fileManager = [[NSFileManager alloc] init];
    NSArray *urls = [fileManager URLsForDirectory:NSDocumentDirectory
    inDomains:NSUserDomainMask];

    URLsForDirectory可以取下面几个值:
      NSLibraryDirectory
      标记应用的library文件夹.
      NSCachesDirectory
      标记caches文件夹,在之前解释说明过.
      NSDocumentDirectory
      标记document文件夹.
    inDomains取值:
      NSUserDomainMask
    标记对文件夹路径的搜索在当前用户文件夹下进行.

    获取tmp的方式有所不同:

    NSString *tempDirectory = NSTemporaryDirectory();

    拼接路径:

    NSString *filePath = [paramPath stringByAppendingPathComponent:fileName];

    三、写文件的方法:

    1.部分类有简单的保存方法,例如NSString,UIImage及NSData,NSArray,NSDictionary

    writeToURL:atomically:encoding:error:
    BOOL succeeded = [someText writeToFile:destinationPath atomically:YES encoding:NSUTF8StringEncoding error:&error];

    函数说明:

    writeToFile
    字符串类型的文件存储路径(上面函数使用URL类型的参数).
    atomically
    一个Boolean值,如果设置为YES,则文件首先会被存储到一个临时空间,然
    后此临时文件才会被移到你所设定的目标路径.这样可以确保文件内容被存储
    到目标路径之前会首先被存储到磁盘某处,此时,即使IOS系统在文件被移到
    最终的目标路径前崩溃,你的数据内容在操作系统稍后恢复时仍将得到保存.
    ,推荐设置此值为YES,以确保你在保存数据时不因应用运行异常情况导致数
    据丢失.
    encoding
    要保存到目标路径的文本字符编码.一般使用NSUTF8StringEncoding.

    2.创建和文件的文件夹的方法:

    文件夹:使用类NSFileManager的实例方法 

    createDirectoryAtPath:withIntermediateDirectories:attributes:error:

    withIntermediateDirectorys
    一个Boolean值,如果设置为YES,则在创建最深层文件前,将会创建所有的父
    文件夹。

    attributes
    一个传递给系统可以影响文件夹将如何创建的属性字典.如文件夹修改日期及时
    间,创建日期及时间及其希望修改的属性.

    文件:

    createFileAtPath:contents:attributes

    3.枚举文件夹:

    使用类NSFileManager实例方法来枚举文件夹下所有的文件,文件夹及符号链接.

    contentsOfDirectoryAtPath:error:

    为了从文件管理器对象获得更细粒度的文件信息,调用

    contentsOfDirectoryAtURL:includingPropertiesForKeys:opinions:error:

    contentsOfDirectoryAtURL
    准备遍历的文件夹路径.此路径需要传递为一个NSURL实例
    includingPropertiesForKeys
    传递一个你希望IOS系统为在目标文件夹下遍历到的文件,文件夹或其他项目返
    回的属性数组值.参数的列表:
    NSURLIsDirectoryKey
    稍后允许你判断遍历到的URL所指对象是否是目录.
    NSURLIsReadableKey
    稍后允许你判断遍历到的URL所指项目对你的应用是否可读.
    NSURLCreateionDateKey
    返回遍历到项目的创建日期.
    NSURLContentAccessDateKey
    返回遍历到项目内容的最后存取日期.
    NSURLContentModificationDateKey
    如同参数名所表示的,此参数允许你判断遍历返回的URL所指项目的最后
    修改时间.
    options
    此参数只允许0或NSDirectoryEnumerationSkipHiddenFiles值传入.如果传入的
    后面这个参数,所有文件在枚举时将被忽略.

    例如遍历得到URL后可以使用下面方法获取文件创建时间:

    - (NSDate *) dateOfType:(NSString *)paramType inURL:(NSURL *)paramURL{
    NSDate *result = nil;
    NSError *error = nil;
    [paramURL getResourceValue:&result
    forKey:paramType
    error:&error];
    if (error != nil){
    NSLog(@"Failed to get property of URL. Error = %@", error);
    }
    return result;
    }
    NSLog(@"Creation Date = %@",
    [self dateOfType:NSURLCreationDateKey inURL:paramURL]);

    4.删除文件或文件夹:

    使用NSFileManager类的实例方法removeItemAtPath:error:或removeItemAtURL.前一
    个方法传递一个字符串类型的路径,后一个传递一个URL指向的路径。

    5.文件句柄FileHandle :

    fileHandleForUpdatingAtPath:
    打开文件并获得读写权限,此将把文件指针放在文件的起始处.
    fileHandleForReadingAtPath:
    打开文件并只具有读取权限.
    fileHandleForWritingAtPath:
    打开文件并只具有写权限.

    对NSFileManger的补充:

    readDataOfLength:
    返回一个NSData对象,包含从文件读取到的n字节.
    writeData:
    把指定的NSData对象写到文件.

    6.普通的Object保存:

    首先Object的属性要是基本属性或是实现了NSCoding协议的属性,其次Object本身也要实现NSCoding

    NSKeyedArchiver
    一个利用键值来归档或存储对象或对象树的类.很像一个字典.
    NSKeyedUnarchiver
    此类进行与归档类相反的操作.

    例子:

    #import "Person.h"
    NSString *const kFirstNameKey = @"FirstNameKey";
    NSString *const kLastNameKey = @"LastNameKey";
    @implementation Person
    - (void)encodeWithCoder:(NSCoder *)aCoder{
    [aCoder encodeObject:self.firstName forKey:kFirstNameKey];
    [aCoder encodeObject:self.lastName forKey:kLastNameKey];
    }
    - (id)initWithCoder:(NSCoder *)aDecoder{
    self = [super init];
    if (self != nil){
    _firstName = [aDecoder decodeObjectForKey:kFirstNameKey];
    _lastName = [aDecoder decodeObjectForKey:kLastNameKey];
    }
    return self;
    }
    @end
    Person *steveJobs = [[Person alloc] init];
    steveJobs.firstName = kFirstName;
    steveJobs.lastName = kLastName;
    /* Archive the object to the file */
    [NSKeyedArchiver archiveRootObject:steveJobs toFile:filePath];
    /* Now unarchive the same class into another object */
    Person *cloneOfSteveJobs =
    [NSKeyedUnarchiver unarchiveObjectWithFile:filePath];

    其实此工作完全可以将对象序列化成Json字符串存储,然后读出后进行反序列化还原成原数据。

     四、读文件方法:

    - (NSString *) readTextFromPath:(NSString *)paramPath
  • 相关阅读:
    我的第一次面试 —— 腾讯 AI安全 一面总结
    从零开始openGL——五、光线追踪
    从零开始openGL——四、纹理贴图与n次B样条曲线
    从零开始openGL——三、模型加载及鼠标交互实现
    从零开始openGL—— 二、 基本图形绘制
    NN入门,手把手教你用Numpy手撕NN(三)
    2020计算机保研经验分享
    TCP实战二(半连接队列、全连接队列)
    TCP实战一(三握四挥、流量控制)
    tcpdump抓包工具的基本使用
  • 原文地址:https://www.cnblogs.com/dokaygang128/p/3492716.html
Copyright © 2011-2022 走看看