美文网首页
沙盒机制

沙盒机制

作者: 李二侠 | 来源:发表于2016-02-29 19:29 被阅读85次
    #pragma mark  ---------------沙盒机制---------
        //沙盒机制包含三个文件夹:Documents library temp
        //期中library包含两个文件夹 Caches  Preferences
        
        //沙盒主路径:
        //程序运行期间,系统会生成一个专属沙盒路径,应用程序在使用期间的非代码文件都存储在当前的沙盒路径里面
        NSString * homePath = NSHomeDirectory();
        NSLog(@"%@",homePath);
      /*
    #pragma  mark --- document 文件:用来存储永久性数据的文件,程序运行时必要的文件都存储在这里(数据库),iTunes数自动备份这里面的文件
        //第一个参数:要查询的文件的路径
        //第二个参数:要查询路径所属的用户(iOS为单用户)
        //第三个参数:YES是绝对路径,NO是相对路径
        //区别于OS X,iOS应用文件夹中通常只有一个文件路径
        //由于OC同时支持苹果系统产品的开发,在Mac OS里面,会同时存在很多文件,生成的路径放在一个数组里面
        //iOS一次只有一个应用,所以取数组唯一一个元素即可
        NSArray *documentPathArray = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, NO);
        NSLog(@"%ld",documentPathArray.count);
        NSString *documentPath = [documentPathArray firstObject];
        NSLog(@"%@",documentPath);
        
    #pragma mark ----library 用于保存程序运行期间生成的文件------
        
        NSArray *libraryArray = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
        NSString *libraryPath = [libraryArray firstObject];
        NSLog(@"libraryArray = %@",libraryPath);
        
    #pragma mark  ----Caches 用来保存程序运行期间缓存的文件
        NSString *cachesPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];
        NSLog(@"cachesPath = %@",cachesPath);
        
    #pragma mark ---preferences 用来保存偏好设置
    //    NSString *preferencesPath = [NSSearchPathForDirectoriesInDomains(NSPreferencePanesDirectory, NSUserDomainMask, YES) firstObject];
        //通过上述方法打印的路径多了panes几个字母,所以需要拼接字符串的方式查找路径
        //单例:NSUserDefaults,通常情况下,并不直接打开文件夹,而是通过NSUserDefaults进行偏好设置的存取
        NSString *preferencesPath = [libraryPath stringByAppendingString:@"/Preference"];
        
        NSLog(@"preferencesPath = %@",preferencesPath);
        
    #pragma mark --- temp 临时文件夹,程序运行期间产生的临时碎片会保存到这个文件夹里面,通常文件下载完之后或者程序退出会自动启动此文件夹,iTunes不会备份这里的数据 ---
        
        //tips:由于系统会清空此文件夹,所以下载或者其他的临时文件若需要持久化,需要及时移走
        NSString *tempPath = NSTemporaryDirectory();
        NSLog(@"%@",tempPath);
      
    #pragma mark  .app 路径(boundle)
       
        //iOS8之前,boundle和tmp等文件都放在主路径下
        //ios8之后,boudle放在container文件夹的里面
        NSString *boundlePath = [[NSBundle mainBundle]resourcePath];
        NSLog(@"%@",boundlePath);
        NSString *imagePath = [[NSBundle mainBundle] pathForResource:@"00" ofType:@"png"];
        NSLog(@"%@",imagePath);*/
        
    #pragma mark --------简单对象写入文件 (NSString ,NSArray,NSDictionary,NSData) -----------
        
     /*
    #pragma mark ---字符串写入文件 
        
        //1.准备字符串
        NSString *string = @"I love myself";
        //2.准备路径
        NSString *path = NSHomeDirectory();
        path = [path stringByAppendingString:@"/LOVE MYSELF.txt"];
        //3.写入文件
        //参数1:路径
        //参数2:是否进行线性操作(YES的时候,保证发生意外时,有中转文件保存信息,直至写入完成,但是损耗大;NO的时候吸入速度快,但是没有安全保障)
        //参数3:编码方式
        //参数4;错误对象
        [string writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:nil];
        //4.打印路径
        NSLog(@"%@",path);
        //4.读取文件
        //参数1:路径
        //参数2:编码方式,要和写入时用相同的编码方式
        //参数3:错误信息
        NSString *contentString = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
        NSLog(@"%@",contentString);
        
        
        
    #pragma mark ---数组写入文件----
        NSArray *array = [NSArray arrayWithObjects:@"Lufei",@"Miangren",@"SuperStar",@"IronMan", nil];
        //路径
        NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
        documentPath = [documentPath stringByAppendingString:@"/superHero.txt"];
        [array writeToFile:documentPath atomically:YES ];
        NSLog(@"%@",documentPath);
        //读取
        NSArray *array1 = [NSArray arrayWithContentsOfFile:documentPath];
        NSLog(@"%@",array1);
        
    #pragma  mark --- 字典写入文件 ----
        
        NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:@"SuperMan",@"Hero",@"Lufei",@"OnePrice",@"Kakaxi",@"RenZhe", nil];
        //路径
        NSString *libiaryPath  = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) firstObject];
        NSString *dictPath = [libiaryPath stringByAppendingString:@"/preferences/SuperStar.txt"];
        [dict writeToFile:dictPath atomically:YES];
        NSLog(@"%@",dictPath);
        //读取
        NSDictionary *dict1 = [NSDictionary dictionaryWithContentsOfFile:dictPath];
        NSLog(@"%@",dict1);
     
    #pragma mark ----- NSData写入文件
        //1.获取图片对象
        UIImage *image = [UIImage imageNamed:@"00.png"];
        //2.准备路径
        NSString *homePath1 = NSHomeDirectory();
        homePath1 = [homePath1 stringByAppendingPathComponent:@"00.png"];
        //3.将图片对象转化成data,并存储
        NSData *data = UIImagePNGRepresentation(image);
        [data writeToFile:homePath1 atomically:YES];
        NSLog(@"%@",homePath1);
        
        //读取图片
        UIImageView *imgView = [[UIImageView alloc]initWithFrame:[UIScreen mainScreen].bounds];
        imgView.image = [UIImage imageWithContentsOfFile:homePath1];
        [self.view addSubview:imgView];
      */
        
        
    #pragma mark ------- 复杂对象写入文件  
        /*
        //简单对象可以通过writeToFile的方法写入文档,但是复杂对象没有此方法,所以我们需要借助归档和反归档的方法,将复杂对象转化成简单对象,写入文件
        SingleVip *vip = [SingleVip new];
        vip.name = @"卡卡西";
        vip.assets = @"100";
        vip.car = @"法拉利";
        vip.age = 25;
        
        //路径
        NSString *vipPath = NSHomeDirectory();
        vipPath = [vipPath stringByAppendingString:@"/木叶上忍.txt"];
        //创建数据对象,用来存放vip对象
        NSMutableData *data = [NSMutableData data];
        //创建归档对象
        NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc]initForWritingWithMutableData:data];
        //开始归档
        [archiver encodeObject:vip forKey:@"vip"];
        //完成归档
        [archiver finishEncoding];
        //写入文件
        [data writeToFile:vipPath atomically:YES];
        
        //反归档,读取文件
        //将文件里面的data对象读取出来
        NSData *data1 = [NSData dataWithContentsOfFile:vipPath];
        //创建反归档对象
        NSKeyedUnarchiver *unarchier = [[NSKeyedUnarchiver alloc]initForReadingWithData:data1];
        SingleVip *vip1 = [unarchier decodeObjectForKey:@"vip"];
        //完成反归档
        [unarchier finishDecoding];
        NSLog(@"%@",vip1.name);
        
        /*
         ********归档并不是数据持久化的一种方式,而是辅助复杂对象转化成简单对象的一种方式,真正实现数据持久化的仍然是writeToFile写入文件**********
         */
        
        /*数据持久化方式
        plist 属性列表
        NSUserDefaults (单例)
        writeToFile (写入文件)
         
         SOLite  数据库
         CoreData
        */
        
    #pragma mark --- NSFileManager 练习 ----
        
        //1.存储与读取图片
    //    NSURLSessionDownloadTask *task = [[NSURLSession sharedSession] downloadTaskWithURL:[NSURL URLWithString:IMG_URL]    completionHandler:^(NSURL * _Nullable location, NSURLResponse * _Nullable response, NSError * _Nullable error) {
    //        
    //        //获取data对象,data可以直接写入文件
    //        NSData *data = [NSData dataWithContentsOfURL:location];
    //        //创建一个文件夹
    //        NSString *homePath = NSHomeDirectory();
    //        homePath = [homePath stringByAppendingString:@"/海贼王"];
    //        //创建NSFileManager
    //        NSFileManager *fileManger = [NSFileManager defaultManager];
    //        [fileManger createDirectoryAtPath:homePath withIntermediateDirectories:YES attributes:nil error:nil];
    //        //创建文件
    //      homePath = [homePath stringByAppendingString:@"/ONE PIRCE"];
    ////        NSString *string = [NSString stringWithFormat:@"%@/123",homePath];
    //        [fileManger createFileAtPath:homePath contents:data attributes:nil];
    //        
    //        
    //    }];
    //    [task resume];
        
        //2.1**存储与读取
        
        //创建文件夹
        NSString *strPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
        NSLog(@"%@",strPath);
        //创建NSFileManger
        NSFileManager *fileManger = [NSFileManager defaultManager];
        [fileManger createDirectoryAtPath:strPath withIntermediateDirectories:YES attributes:nil error:nil];
        //创建文件
        strPath = [strPath stringByAppendingString:@"/str.txt"];
        //写入文件
        NSString *string = @"鸣人的大招是螺旋丸";
        [string writeToFile:strPath atomically:YES encoding:NSUTF8StringEncoding error:nil];
        
        //读取所存入的字符串
        NSString *string1 = [NSString stringWithContentsOfFile:strPath encoding:NSUTF8StringEncoding error:nil];
        NSLog(@"%@",string1);
        
        //**2.2移动所存储的文件同时将文件重命名
        NSString *strPath1 = [NSHomeDirectory() stringByAppendingString:@"/Library/str1.txt"];
        if ([fileManger moveItemAtPath:strPath toPath:strPath1 error:nil] == YES) {
            NSLog(@"文件移动且重命名成功");
        }
        NSLog(@"%@",strPath1);
        
        //**2.3复制文件
        NSString *strPath2 = [NSHomeDirectory() stringByAppendingString:@"/Library/str2.txt"];
        if ([fileManger copyItemAtPath:strPath toPath:strPath2 error:nil] == YES) {
            
            NSLog(@"复制成功!");
        }
        
        //**2.4删除路径下的文件
    //    [fileManger removeItemAtPath:strPath2 error:nil];
        
        
        //**2.5判断文件是否存在
        if ([fileManger fileExistsAtPath:strPath] == YES) {
            
            NSLog(@"该文件存在!!");
        }
        
        //**2.6判断两个文件的内容是否相等
        if ([fileManger contentsEqualAtPath:strPath andPath:strPath2] == YES) {
            
            NSLog(@"两个文件内容一样");
        }
        
    

    相关文章

      网友评论

          本文标题:沙盒机制

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