今天介绍几种获取沙盒路径以及其子文件夹路径的方法:
---------获取沙盒路径---------
NSString *homePath = NSHomeDirectory();
NSLog(@"%@", homePath);
打印结果如上,将打印后的路径复制下来
回到桌面,右键单击下图第一个图标,点击前往文件夹
然后会弹出如下图的框,将复制后的内容粘贴上去,点击前往就能查看到沙盒路径了
如下图所示:
获取沙盒中子文件夹路径有两种方法:
方式1、拼接路径
下面的两种分别是获取Documents和Library以及Cache的路径
NSString *document = [homePath stringByAppendingPathComponent:@"/Documents"];
NSLog(@"%@", document);
//获取Library文件夹路径
NSString *library = [homePath stringByAppendingPathComponent:@"/Library"];
NSLog(@"library = %@", library);
方式2、 通过函数获取
//获取Documents文件夹路径
NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSLog(@"documentPath = %@", documentPath);
//获取Library文件夹路径
NSString *libraryPath = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) lastObject];
NSLog(@"library = %@", libraryPath);
//获取Cache文件夹路径
NSString *cachePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
NSLog(@"cachePath = %@", cachePath);
获取tmp的路径以及app路径就不需要那么麻烦了,如下:
//tmp路径
NSString *tmpPath = NSTemporaryDirectory();
NSLog(@"tmpPath = %@", tmpPath);
//应用程序路径
NSString *appPath = [[NSBundle mainBundle] resourcePath];
NSLog(@"!!!appPath = %@", appPath);
跟上面一样,通过打印后的路径访问文件夹位置
需要注意的是!!!:即使是相同的文件夹打印出来的路径每次也都不一样,所以当你再运行一遍程序后再用上次打印出来的路径访问将会是错误的,找不到改路径;
肯定有人要问了,既然知道如何访问这些文件夹,那么怎样往这些文件夹下面存储文件呢?下面介绍几种存储文件的方法:
几种简单对象的介绍,下面将会用到这些对象存储一些数据
/*
简单对象:NSString NSArray NSDictionary NSData NSSet
数据持久化:把简单数据写入到文件中,存储到沙盒文件夹里
NSData 用于存储二进制数据
*/
1、字符串对象的写入与读取
//写入一个txt文件
//第一步:创建字符串对象
NSString *poem = @"花间一壶酒,独酌无相亲\n举杯邀明月,对影成三人\n月既不解饮,影徒随我身\n暂伴月将影,行乐须及春\n我歌月徘徊,我舞影零乱\n醒时同交欢,醉后各分散\n永结无情游,相期邈云汉";
//第二步:构造字符串文件存储路径,创建txt文件
NSString *strPath = [documentPath stringByAppendingPathComponent:@"/text.txt"];
//第三步:将文件写入指定路径
[poem writeToFile:strPath atomically:YES encoding:NSUTF8StringEncoding error:nil];
NSLog(@"strPath = %@", strPath);
还是最开始的方法,用打印后的路径复制粘贴后前往文件夹,这时你会发现这个文件夹下面多了一个txt文件,如下图:
//读取txt的方法
NSString *readText = [NSString stringWithContentsOfFile:strPath encoding:NSUTF8StringEncoding error:nil];
NSLog(@"%@", readText);
打印后的结果如下:
2、数组对象的写入 和 读取
//写入
//第一步:构造一个数组对象
NSMutableArray *starArray = [NSMutableArray arrayWithObjects:@"春", @"夏", @"秋", @"冬", nil];
//第二步:构造数组存储路径创建plist文件
NSString *arrayPath = [documentPath stringByAppendingPathComponent:@"/array.plist"];
[starArray writeToFile:arrayPath atomically:YES];
NSLog(@"arrayPath = %@", arrayPath);
//数组中再添加元素
[starArray addObject:@"季节"];
[starArray writeToFile:arrayPath atomically:YES];
//读取
NSArray *readArray = [NSArray arrayWithContentsOfFile:arrayPath];
NSLog(@"readArray = %@", readArray);
3、字典对象的写入和读取
//******写入
//第一步:构造一个字典
NSDictionary *dic = @{@"name" : @"武则天", @"age": @"61", @"sex" : @"女", @"job" : @"皇帝", @"hobby" : starArray};
//第二步:构造存储字典的plist文件的存储路径
NSString *dicPath = [documentPath stringByAppendingPathComponent:@"/dic.plist"];
//第三步:写入
[dic writeToFile:dicPath atomically:YES];
NSLog(@"dicPath = %@", dicPath);
//******读取
NSDictionary *readDic = [NSDictionary dictionaryWithContentsOfFile:dicPath];
NSLog(@"%@", readDic);
图片的写入和读取有些不同,需要转化为二进制数存储
4、NSData对象的写入 和 读取
//第一步:创建图片
UIImage *image = [UIImage imageNamed:@"01.jpg"];
//第二步:将图片转化成二进制
NSData *data = UIImageJPEGRepresentation(image, 0.5);
//第三步:构造NSData文件.da的存储路径
NSString *imagePath = [documentPath stringByAppendingPathComponent:@"/data.da"];
//第四步:写入
[data writeToFile:imagePath atomically:YES];
NSLog(@"%@", imagePath);
通过打印后的路径查看文件夹中的写入的文件,如下图:
以上就是初级数据持久化的内容,希望可以帮助到大家