• iOS进阶(数据处理之文件读写)


    1.沙盒的定义

    每一个iOS程序都会为自己创建一个文件系统目录,这个独立、封闭、安全的空间就叫做沙盒

    2.Documents、library(caches/preferences)、tmp

    Documents:保存文档信息(例如图片,视频等)的路径信息

    Library--caches:存放体积比较大的缓存资源

    Library--preferences:保存应用的所有偏好设置(NSUsersDefault)

    tmp:保存运行时所需的临时数据

    3.获取文件目录

    获取当前应用程序的沙盒根目录

    NSString *rootPath = NSHomeDirectory();

    获取Documents文件目录

    NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];

    获取caches文件目录

    NSString *cachePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
        NSLog(@"%@",cachePath);

    获取preference文件目录

    NSString *libPath = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) lastObject];
        NSLog(@"%@",libPath);
     NSString *cachePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
        NSLog(@"%@",cachePath)

    获取tmp目录   ○

    NSString *tmpPath = NSTemporaryDirectory();

    4.四种简单对象

    NSString/NSArray/NSDictionary/NSData

    5.文件处理器(NSFileManager)与文件处理器(NSFileHandle)

    NSFileManager

    // 在Documents文件夹下,创建一个文件夹(path),在该文件夹下创建一个文件(test.txt),将一个图片对象存入到该文件中,然后在Caches文件夹下创建一个文件夹名为"testDirectroy",将test.txt文件移动到这个文件夹下.
        
        NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
        
        NSString *Path = [docPath stringByAppendingPathComponent:@"path"];
        
        NSFileManager *filemanager = [NSFileManager defaultManager];
        
        [filemanager createDirectoryAtPath:Path withIntermediateDirectories:YES attributes:nil error:nil];
    
        NSString *testPath = [Path stringByAppendingPathComponent:@"test.txt"];
        UIImage *image = [UIImage imageNamed:@"1.jpg"];
        NSData *data = UIImageJPEGRepresentation(image, 1.0);
        
        [data writeToFile:testPath atomically:YES];
        
        NSString *cachePath =[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
        NSString *dirPath = [cachePath stringByAppendingPathComponent:@"testDirectroy"];
        [filemanager createDirectoryAtPath:dirPath withIntermediateDirectories:YES attributes:nil error:nil];
         NSLog(@"dirPath is %@",dirPath);
        
    //移动
        NSString *desPath = [dirPath stringByAppendingPathComponent:@"aa.txt"];
    
        [filemanager moveItemAtPath:testPath toPath:desPath error:nil];

    NSFileHandle

    对文件内容进行局部修改追加

    6.归档与反归档

    归档

    //创建两个人
        Person *bada = [[Person alloc] initWithName:@"bada" age:@"22" gender:@""];
        Person *qiuxiang = [[Person alloc] initWithName:@"qiuxiang" age:@"18" gender:@""];
        
        //获取路径
        NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
        
        //iOS 中的归档类是NSKeyedArchiver,这个类的作用是将复杂对象转换成NSData对象
        //创建一个可变数据对象
        NSMutableData *mData = [NSMutableData data];
        
        NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:mData];
        //归档时要给归档对象添加标记
        [archiver encodeObject:bada forKey:@"bada"];
        [archiver encodeObject:qiuxiang forKey:@"qiuxiang"];
        
        [archiver finishEncoding];//结束归档,不管还有多少未进行归档的对象,都不会执行归档操作
        //将数据写入文件
        //创建文件路径
        NSString *filePath = [docPath stringByAppendingPathComponent:@"love.png"];//为二进制流文件,什么格式都可以
        [mData writeToFile:filePath atomically:YES];

    解档

    //获取到存放数据的路径
         NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
        NSString *filePath = [docPath stringByAppendingPathComponent:@"love.png"];
        
        //获取NSData对象
        NSData *data = [NSData dataWithContentsOfFile:filePath];
        //iOS中的解档类是NSKeyedUnarchiver,他的作用是将NSData对象还原成原本的复杂对象
        NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
        
        //解档
        Person *person = [unarchiver decodeObjectForKey:@"bada"];
        NSLog(@"%@,%@,%@",person.name,person.age,person.gender);
  • 相关阅读:
    wm
    usual
    itk_option remove
    Label Options
    imosflm controller
    set font
    namespace code
    git 之五分钟教程
    git 之五分钟教程
    学习perl正则表达式
  • 原文地址:https://www.cnblogs.com/w150385/p/5251571.html
Copyright © 2020-2023  润新知