UIday1801:沙盒三个文件的路径的获取、简单与复杂对象的读写、NSUserDefaults、NSFileManager

本文主要是介绍UIday1801:沙盒三个文件的路径的获取、简单与复杂对象的读写、NSUserDefaults、NSFileManager,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

初级数据持久化(沙盒三个文件的路径的获取、简单与复杂对象的读写、NSUserDefaults、NSFileManager  )

NSDocumentDirectory 是指程序中对应的Documents路径,而NSDocumentionDirectory对应于程序中的Library/Documentation路径,这个路径是没有读写权限的,所以看不到文件生成。

IOS开发是在沙盒中开发的,对一些部分的文件的读写进行了限制,只能在几个目录下读写文件:
 (1)Documents:应用中用户数据可以放在这里,iTunes备份和恢复的时候会包括此目录
 (2)tmp:存放临时文件,iTunes不会备份和恢复此目录,此目录下文件可能会在应用退出后删除
 (3)Library/Caches:存放缓存文件,iTunes不会备份此目录,此目录下文件不会在应用退出删除
 对于文件操作,NSSearchPathForDirectoriesInDomains是核心函数。


ViewController.m

#import "ViewController.h"
#import "Person.h"@interface ViewController ()@property(nonatomic,strong)UIImageView * imV;@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];// Do any additional setup after loading the view, typically from a nib.// 沙盒 就是一个文件夹// *********获取沙盒路径************
/*// 获取用户名NSString * s = NSUserName();// 获取主路径NSString * rootPath = NSHomeDirectoryForUser(s);NSLog(@"%@",rootPath);*/// ************获取沙盒三个文件夹的路径***********/*// otherNSString * rootPath1 = NSHomeDirectory();NSLog(@"rootPath1 = %@",rootPath1);// 获取doucments路径// 作用 数据运行程序后产生,主要存储数据库等不常改变的数据文件。存在这里的文件会被备份。(下载的文件不能放在这里,如果放在这上传APPStore的时候会被拒掉)NSString * documentsPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];NSLog(@"documentsPath = %@",documentsPath);// 获取Caches路径// 作用存放缓存文件,例如:音频、视频、图片(不会被自动备份)NSString * cachesPath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];NSLog(@"cachesPath = %@",cachesPath);// 获取tmp路径// 作用:存放临时文件,程序下次启动不需要,退出清空。NSString * tmpPath = NSTemporaryDirectory();NSLog(@"tmpPath = %@",tmpPath);*///***********简单文件的写入*****************
/*//准备路径NSString * documentsPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];NSLog(@"%@",documentsPath);//----------------NSString的写和读---------------//NSString  NSArray  NSDictionary  NSDataNSString * str1 = @"hello world";NSString * filePath = [documentsPath stringByAppendingString:@"/hello.txt"];//写入
//    [str1 writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:nil];//读出NSString *s1 = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil];NSLog(@"s1 = %@" ,s1);//------------- NSArray 的写和读 --------------//stringByAppendingPathComponent: 路径不需要写斜线,不需要写后缀NSString * filePath2 = [documentsPath stringByAppendingPathComponent:@"array"];NSArray *array1 = @[@"1",@"2",@"3"];//写入
//    [array1 writeToFile:filePath2 atomically:YES];//读NSArray * array2 = [NSArray arrayWithContentsOfFile:filePath2];//    NSLog(@"array2 = %@",array2);//------------- NSDictionary 的写和读------------NSString * filePath3 = [documentsPath stringByAppendingPathComponent:@"Dictionary"];//写入NSDictionary * dict = @{@"山西":@"太原",@"河北":@"石家庄"};[dict writeToFile:filePath3 atomically:YES];//读NSDictionary * dict2 = [NSDictionary dictionaryWithContentsOfFile:filePath3];NSLog(@"dict2  %@",dict2);//遍历字典for (id obj in dict2) {NSLog(@"dict2 %@ = %@",obj,[dict2 valueForKey:obj]);}*///*************** 复杂对象写入1 *****************
/*//创建对象Person * p1 = [[Person alloc]init];p1.name = @"贝爷";p1.age = 20;//准备NSMutableData 存数据NSMutableData * data = [NSMutableData data];创建归档工具NSKeyedArchiver * archiver = [[NSKeyedArchiver alloc]initForWritingWithMutableData:data];//开始归档[archiver encodeObject:p1 forKey:@"p1"];//完成归档[archiver finishEncoding];//准备路径NSString * documentsPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];NSString * filePath4 = [documentsPath stringByAppendingPathComponent:@"贝爷.m"];NSLog(@"%@",documentsPath);//data写入
//    [data writeToFile:filePath4 atomically:YES];//读NSData * data1 = [NSData dataWithContentsOfFile:filePath4];NSLog(@"data1 = %@",data1);//反归档NSKeyedUnarchiver * unarchiver = [[NSKeyedUnarchiver alloc]initForReadingWithData:data1];//转换成对象Person * p2 = [unarchiver decodeObjectForKey:@"p1"];//反归档完成[unarchiver finishDecoding];NSLog(@"%@ == %ld",p2.name,p2.age);*///*************** 复杂对象写入2 *****************
/*//准备路径NSString * documentsPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];//拼接路径NSString * filePath5 = [documentsPath stringByAppendingPathComponent:@"person.mp4"];//创建person对象Person *p3 = [[Person alloc]init];p3.name = @"六娃";p3.age = 18;//存
//    [NSKeyedArchiver archiveRootObject:p3 toFile:filePath5];//取 (这种归档方式,只能针对一个对象)Person * p4 = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath5];NSLog(@"%@ == %ld",p4.name,p4.age);*///************* NSUserDefaults 通常用来写引导页 ********
/*// 创建对象NSUserDefaults * ud = [NSUserDefaults standardUserDefaults];// 存[ud setObject:@"yan3" forKey:@"lanou"];// 同步数据[ud synchronize];// 取NSLog(@"%@",[ud objectForKey:@"lanou"]);*///************** 导航页测试 ****************
/*// 创建对象// NSUserDefaults 存一些简单的数据NSUserDefaults * ud = [NSUserDefaults standardUserDefaults];NSString *s = [ud objectForKey:@"first"];if (s == nil) {self.imV = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"000.png"]];self.imV.frame = self.view.bounds;[self.view addSubview:_imV];[ud setObject:@"NO" forKey:@"first"];}*///*********** NSFileManager 文件管理对象 ************//路径NSString * cachesPath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];NSLog(@"%@",cachesPath);//创建文件管理对象NSFileManager * fm = [NSFileManager defaultManager];//创建文件夹[fm createDirectoryAtPath:[cachesPath stringByAppendingPathComponent:@"00/test"] withIntermediateDirectories:YES attributes:nil error:nil];//更改文件名[fm moveItemAtPath:[cachesPath stringByAppendingPathComponent:@"00/test"] toPath:[cachesPath stringByAppendingPathComponent:@"Demo"] error:nil];//移动文件位置[fm moveItemAtPath:[cachesPath stringByAppendingPathComponent:@"00/test"] toPath:[cachesPath stringByAppendingPathComponent:@"Demo/test"] error:nil];//删除文件[fm removeItemAtPath:[cachesPath stringByAppendingPathComponent:@"Demo/test"] error:nil];//判断一个文件是否存在BOOL i = [fm fileExistsAtPath:@"Demo"];NSLog(@"%d",i);    }- (void)didReceiveMemoryWarning {[super didReceiveMemoryWarning];// Dispose of any resources that can be recreated.
}@end

Person.h

#import <Foundation/Foundation.h>//一个类是否可以被归档反归档,要看是否遵循NSCoding协议。@interface Person : NSObject<NSCoding>@property(nonatomic,copy)NSString * name;@property(nonatomic,assign)NSInteger age;@end

Person.m

#import "Person.h"@implementation Person// 编码
- (void)encodeWithCoder:(NSCoder *)aCoder{[aCoder encodeObject:self.name forKey:@"p_name"];[aCoder encodeInteger:self.age forKey:@"p_age"];
}// 反编码
- (id)initWithCoder:(NSCoder *)aDecoder{if (self = [super init]) {self.name = [aDecoder decodeObjectForKey:@"p_name"];self.age = [aDecoder decodeIntegerForKey:@"p_age"];}return self;}@end


这篇关于UIday1801:沙盒三个文件的路径的获取、简单与复杂对象的读写、NSUserDefaults、NSFileManager的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/884626

相关文章

10. 文件的读写

10.1 文本文件 操作文件三大类: ofstream:写操作ifstream:读操作fstream:读写操作 打开方式解释ios::in为了读文件而打开文件ios::out为了写文件而打开文件,如果当前文件存在则清空当前文件在写入ios::app追加方式写文件ios::trunc如果文件存在先删除,在创建ios::ate打开文件之后令读写位置移至文件尾端ios::binary二进制方式

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

hdu2289(简单二分)

虽说是简单二分,但是我还是wa死了  题意:已知圆台的体积,求高度 首先要知道圆台体积怎么求:设上下底的半径分别为r1,r2,高为h,V = PI*(r1*r1+r1*r2+r2*r2)*h/3 然后以h进行二分 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#includ

hdu2544(单源最短路径)

模板题: //题意:求1到n的最短路径,模板题#include<iostream>#include<algorithm>#include<cstring>#include<stack>#include<queue>#include<set>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#i

usaco 1.3 Prime Cryptarithm(简单哈希表暴搜剪枝)

思路: 1. 用一个 hash[ ] 数组存放输入的数字,令 hash[ tmp ]=1 。 2. 一个自定义函数 check( ) ,检查各位是否为输入的数字。 3. 暴搜。第一行数从 100到999,第二行数从 10到99。 4. 剪枝。 代码: /*ID: who jayLANG: C++TASK: crypt1*/#include<stdio.h>bool h

uva 10387 Billiard(简单几何)

题意是一个球从矩形的中点出发,告诉你小球与矩形两条边的碰撞次数与小球回到原点的时间,求小球出发时的角度和小球的速度。 简单的几何问题,小球每与竖边碰撞一次,向右扩展一个相同的矩形;每与横边碰撞一次,向上扩展一个相同的矩形。 可以发现,扩展矩形的路径和在当前矩形中的每一段路径相同,当小球回到出发点时,一条直线的路径刚好经过最后一个扩展矩形的中心点。 最后扩展的路径和横边竖边恰好组成一个直

poj 1734 (floyd求最小环并打印路径)

题意: 求图中的一个最小环,并打印路径。 解析: ans 保存最小环长度。 一直wa,最后终于找到原因,inf开太大爆掉了。。。 虽然0x3f3f3f3f用memset好用,但是还是有局限性。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#incl

poj 1113 凸包+简单几何计算

题意: 给N个平面上的点,现在要在离点外L米处建城墙,使得城墙把所有点都包含进去且城墙的长度最短。 解析: 韬哥出的某次训练赛上A出的第一道计算几何,算是大水题吧。 用convexhull算法把凸包求出来,然后加加减减就A了。 计算见下图: 好久没玩画图了啊好开心。 代码: #include <iostream>#include <cstdio>#inclu

uva 10130 简单背包

题意: 背包和 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#include <stack>#include <vector>#include <queue>#include <map>

【STM32】SPI通信-软件与硬件读写SPI

SPI通信-软件与硬件读写SPI 软件SPI一、SPI通信协议1、SPI通信2、硬件电路3、移位示意图4、SPI时序基本单元(1)开始通信和结束通信(2)模式0---用的最多(3)模式1(4)模式2(5)模式3 5、SPI时序(1)写使能(2)指定地址写(3)指定地址读 二、W25Q64模块介绍1、W25Q64简介2、硬件电路3、W25Q64框图4、Flash操作注意事项软件SPI读写W2