• 数据处理文件读取---预习 1.30


    一、沙盒机制

    沙盒就是一个单独的,封闭的空间(好像后来不封闭,外面的应用程序也可以访问了),每一个应用程序都有一个这样的沙盒,用来存储相应的东西(东西:所有的非代码的东西,如图片,声音,属性列表,数据库,文本文件)(应用程序的沙盒,就是应用程序的目录)

     每一个沙盒地下都有三个文件 Documents-文档 Library(Caches,PreFerences) tmp-临时文件

    Document应用程序持久化的文件都是存储在这个文件夹下的

    Library/Caches 存放缓存文件 存放体积大,不太重要文件,iTunes不会存储此文件下的内容   

    Library/Preferences 保存偏好设置 (不应该直接创建好设置文件)而是使用NSUserDefaults类来获得和设置应用程序的偏好(应该意思是不设置偏好,而是建立一个可以设置偏好的东西,然后让用户去设置偏好什么的)

    tmp 存放零时文件,iTunes不会同步该目录,iPhone重启时(重启时会丢弃所以的tmp文件,但是当应用程序关闭时有可能会删除该应该程序下的tmp文件,该目录下的文件会被删除

    获取文件的目录

    方法:

    NSString *path = NSSearchPathForDirectoriesInDomains(NSCachesDirectory(这里的参数换成其他类型的就可以获得其他类型的文件目录了), NSUserDomainMask, YES)[0]

     

    tmp的文件目录获取有所不同

    NSString *path = NSTemporaryDirctory();

    二、简单对象的写入与读出

    1、简单对象的读取和录入

    字符串数据 

    [NSString stringWithContentsOfFile:<#(nonnull NSString *)#> encoding:<#(NSStringEncoding)#> error:<#(NSError * _Nullable __autoreleasing * _Nullable)#>]

    读取类型开头+ withContectOfFile:<#(nonnull NSString *)#> encoding:<#(NSStringEncoding)#>

    写入 writeToFile:atomically:encoding:error:

    不研究NSdata

    三、文件管理器

    文件管理器NSFileManager(用实例说明)把文件的位置对换,还有很多方法,慢慢看

    NSString *documentpath = [self getDocument];

        NSString *pathForText = [documentpath stringByAppendingString:@"/path"];

        NSString *contentPathForText = [pathForText stringByAppendingString:@"/text.tet"];

        NSString *imageName = @"boxer_dog_72px_1165292_easyicon.net-2";

        [imageName writeToFile:contentPathForText atomically:YES encoding:NSUTF8StringEncoding error:nil];

        

        NSArray *cachesPaths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);

        NSString *cachesPath = [cachesPaths objectAtIndex:0];

        NSString *textDicPath = [cachesPath stringByAppendingString:@"/textDirectroy"];

        

        NSFileManager *fileManager = [NSFileManager defaultManager];

        [fileManager moveItemAtPath:contentPathForText toPath:textDicPath error:nil];

     

    文件对接器NSFileHandle

    这个类必须使用NSFileManager方法来创建文件,因此在使用是必须保证文件以及存在,否则返回的都是nil

    四、复杂对象的对象与读取

    对于自己定义的复杂的类,我们无法通过简单的writeTOFile:进行数据的持久化,只能通过归档然后再通过writeToFile写入文件

    归档 

    首先,复杂对象所属的类要遵守<NSCoding>协议,然后实现协议中的两个方法

    - (void)encodeWithCoder:(NSCoder *)aCoder ;序列化

    -(void)initWithCoder:(NSCoder *)aDecoder;反序列化

       //创建一个NSMutableData,用于保存归档后的对象

        NSMutableData *data = [NSMutableData data];

        //创建一个归档公工具

        NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];

        Person *person = [[Person alloc] init];

        person.age = @"19";

        person.name = @"kyrie";

    //    存入归档

        [archiver encodeObject:person forKey:@"p1"];

    //    结束归档

        [archiver finishEncoding];

        

    //    沙盒路径

        NSString *path = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];

        NSString *PersonPath = [path stringByAppendingPathComponent:@"person"];

        

        [data writeToFile:PersonPath atomically:YES];

        

        //返归档

        NSData *getdata = [NSData dataWithContentsOfFile:PersonPath];

        

    //反归档工具

        NSKeyedUnarchiver *unArchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:getdata];

        Person *person2 = [unArchiver decodeObjectForKey:@"p1"];

        [unArchiver finishDecoding];

        

        NSLog(@"%@",person2.name);

  • 相关阅读:
    KBEngine源码:EntityCall
    skynet 学习笔记-sproto模块(2)
    mongodb:为什么用mongodb
    编写高效服务器程序,需要考虑的因素
    b+树
    mysql:架构
    超越函数/微分方程 /积分中的技术/级数
    积分从入门到放弃<2>
    PyQt4 / PyQt5
    图形学算法:
  • 原文地址:https://www.cnblogs.com/naizui/p/5170803.html
Copyright © 2020-2023  润新知