Plist文件存储及沙盒路径详解

来源:互联网 发布:淘宝大屏的轮播图 编辑:程序博客网 时间:2024/06/05 06:28

1.plist文件概念

Property List 属性列表文件

它是一种用来存储串行化后的对象的文件。属性列表文件的扩展名为.plist ,因此通常被称为 plist文件。文件是xml格式的。
plist文件通常用于储存用户设置,也可以用于存储捆绑的信息。


2.plist文件存储位置

<1>工程里的文件路径

NSBundle * bundle = [NSBundle mainBundle];NSString * path = [bundle pathForResource:@"plistDocument" ofType:@"plist"];NSLog(@"%@",path);

输出后的结果 (Xcode7)

/Users/yourname/Library/Developer/CoreSimulator/Devices/sandBoxDirectory/data/Containers/Bundle/Application/sandBoxDirectory/projectName/plistDocument

<2>沙盒里的文件路径

NSArray * pathArray = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);NSLog(@"pathArray = %@",pathArray);NSString * plistPath = [pathArray objectAtIndex:0];NSLog(@"沙盒存储目录 = %@",plistPath);

输出后的结果 (Xcode7)

/Users/yourname/Library/Developer/CoreSimulator/Devices/sandBoxDirectory/data/Containers/Bundle/Application/sandBoxDirectory/projectName/plistDocument

可以看出,Xcode7中,直接寻找工程中的plist文件,输出的路径与沙盒路径一致,即运行后沙盒中提供了相同的plist文件。
由此可知,这种情况下,我们找到的路径并非原工程中的路径,对该路径下的文件操作必然也跟工程中的文件无关了。当需要把数据写入plist文件并运用于工程中时,可以先创建文件并存储到沙盒中,再移入工程使用;或者直接利用具体路径在原工程的plist文件上进行改动。

读取plist文件

NSArray * array = [NSArray arrayWithContentsOfFile:filePath];NSDictionary * dictionary = [NSDictionary dictionaryWithContentsOfFile:filePath];

3.关于沙盒下的存储目录

默认情况下,每个沙盒含有3个文件夹DocumentsLibrarytmp。因为应用的沙盒机制,应用只能在几个目录下读写文件

Documents
程序中建立的或在程序中浏览到的文件数据会保存在该目录下,iTunes备份和恢复的时候会包括此目录

Library
存储程序的默认设置或其它状态信息;

Caches
存放缓存文件,iTunes不会备份此目录,此目录下文件不会在应用退出删除

tmp
存放临时文件,iTunes不会备份和恢复此目录,此目录下文件可能会在应用退出后删除

注:iTunes在与iPhone同步时,会备份所有的Documents和Library文件。
iPhone在重启时,会丢弃所有的tmp文件。


那么我们详细看一下沙盒目录的存储情况:

NSArray * pathArray = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);NSLog(@"pathArray = %@",pathArray);

进入NSDocumentDirectory发现是枚举类型,NSSearchPathDirectory提供了程序运行后各种文件夹路径
我们看到这几个时已经很明白了(只列举部分):

NSDocumentDirectoryNSLibraryDirectoryNSCachesDirectory

我们需要找什么目录,替换NSSearchPathForDirectoriesInDomains第一个参数就行了

可能你发现tmp目录呢?没找到啊。的确,NSSearchPathDirectory里没有tmp目录,可以使用其他的方式寻找:

/** Document的上级目录,即根目录 */NSHomeDirectory()/** tmp目录 */NSTemporaryDirectory()// 可以这么办NSString * filePath = [NSHomeDirectory() stringByAppendingPathComponent:@"tmp/plistDocument.plist"];// 或者直接找到tmp目录下NSString * tmpPath = NSTemporaryDirectory();

另外,模拟器目录和真机目录的区别
我们用NSHomeDirectory()输出一下便知

  • 模拟器目录
/Users/yourname/Library/Developer/CoreSimulator/Devices/sandBoxDirectory/data/Containers/Bundle/Application/sandBoxDirectory
  • 真机目录
/var/mobile/Containers/Data/Application/sandBoxDirectory/Documents

4.NSUserDefaults数据存储位置

[[NSUserDefaults standardUserDefaults] setObject:obj forKey:key];

使用这种方式存储的数据,放置在 /Library/Prefereces 下的一个plist文件中
若想移除,直接removeObjectForKey或是删掉沙盒即可


以上只是简略的说明文件存储路径的问题,文件管理部分内容将在后续进行补充。

0 0
原创粉丝点击