plist基本操作

重要概念:某些路径下“只能读,不能写”的原因

  iPhone、ipad真机上

  Resouces文件夹:是只读的,无法写入。

  document 和temp文件夹:可读,可写

一、工程结构

  

二、源代码

   1、头文件:PlistManage.h

@interface PlistManage : NSObject



-(void)resourcePathFileRead;//当前工程资源目录,不同于真机“沙箱”中的路径



-(NSString *)docPath;//获取document文件夹路径



-(BOOL)isDirNeedCreate:(NSString *)dirPath;//判断目录是否需要新创建



-(BOOL)isFileNeedCreate:(NSString *)filePath;//判断文件是否需要创建
-(void) doAdd; -(void) doRead; -(void) doModify; -(void) doDelete; @end

   2、一些基本函数的实现:

//获取document目录路径

-(NSString *)docPath

{

    NSArray * paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

    return [paths objectAtIndex:0];

}

//路径是否需要创建

-(BOOL)isDirNeedCreate:(NSString *)dirPath

{

    if ( NO == [[NSFileManager defaultManager] fileExistsAtPath:dirPath] )

    {

        return [[NSFileManager defaultManager] createDirectoryAtPath:dirPath

                                         withIntermediateDirectories:YES

                                                          attributes:nil

                                                               error:NULL];

    }

    

    return NO;

}

//文件是否需要创建

-(BOOL)isFileNeedCreate:(NSString *)filePath{

    if ( NO == [[NSFileManager defaultManager] fileExistsAtPath:filePath] )

    {

        return [[NSFileManager defaultManager] createFileAtPath:filePath contents:nil attributes:nil];

    }

    

    return NO;

}

   3、添加:包括创建不存在的空文件

-(void) doAdd{

    

    NSString *docPath=[self docPath];

    NSLog(@"当前docment路径:\n%@",docPath);

    NSString *dataFile=[docPath stringByAppendingPathComponent:@"docData.plist"];

    

    if (YES==[self isFileNeedCreate:dataFile]) {

        NSLog(@"文件原先不存在,现已新建空文件!");

    }else{

        NSLog(@"文件已存在,无需创建!");

    }

    

    NSMutableDictionary *plistDic = [[NSMutableDictionary alloc ] init];

    // 添加2个“单条记录”

    [plistDic setObject:@"shanghai" forKey:@"recordKey001"];

    [plistDic setObject:@"beijing" forKey:@"recordKey002"];

    // 添加2个“字典记录”

    [plistDic setObject:[NSDictionary dictionaryWithObjectsAndKeys:@"Jack",@"name",@"22",@"age",nil] forKey:@"dicKey001"];

    [plistDic setObject:[NSDictionary dictionaryWithObjectsAndKeys:@"Tom",@"name",@"33",@"age",nil] forKey:@"dicKey002"];

    

    [plistDic writeToFile:dataFile atomically:YES];//完全覆盖

    NSLog(@"添加内容完成!!");

}

   运行结果:

   

   对应路径下生成了新文件:

   

   内容如下

    

   4、读取

-(void) doRead{

    NSString *dataFile=[[self docPath] stringByAppendingPathComponent:@"docData.plist"];

    

    //读取所有内容

    NSDictionary* dic = [NSDictionary dictionaryWithContentsOfFile:dataFile];

    NSLog(@"完整内容:\n%@",dic);

    

    //读取第一层“字典记录”

    NSDictionary* dicValue=[dic objectForKey:@"dicKey001"];

    NSLog(@"读取第一层“字典记录”:\n%@",dicValue);

    

    //读取第一层“字典记录”中的“子元素”

    NSLog(@"读取第一层“字典记录”中的“子元素”:\nname=%@",[dicValue objectForKey:@"name" ]);

    

    //读取第一层“单条记录”

    NSLog(@"读取第一层“单条记录”:\nrecordKey001=%@",[dic objectForKey:@"recordKey001"]);

}

    运行结果:

    

     5、修改

-(void) doModify{

    NSString *dataFile=[[self docPath] stringByAppendingPathComponent:@"docData.plist"];

    NSMutableDictionary *dic = [[[NSMutableDictionary alloc]initWithContentsOfFile:dataFile]mutableCopy];

    

    //修改“单条记录”

    NSString *city = [dic objectForKey:@"recordKey001"];

    city = @"shanghai-new";

    [dic setObject:city forKey:@"recordKey001"];

    //修改“字典记录”

    NSMutableDictionary *personInfo = [dic objectForKey:@"dicKey001"];

    NSString *name = [dic objectForKey:@"name"];

    name = @"Jack-new";

    [personInfo setValue:name forKey:@"name"];

    [dic setValue:personInfo forKey:@"dicKey001"];

    //写入文件

    [dic writeToFile:dataFile atomically:YES];

    

    NSDictionary* dicResult = [NSDictionary dictionaryWithContentsOfFile:dataFile];

    NSLog(@"修改结果:\n%@",dicResult);

}

    运行结果:

    

   6、删除

-(void) doDelete{

    NSString *dataFile=[[self docPath] stringByAppendingPathComponent:@"docData.plist"];

    NSMutableDictionary *dic = [[[NSMutableDictionary alloc]initWithContentsOfFile:dataFile]mutableCopy];

    //删除“单条记录”

    [dic removeObjectForKey:@"recordKey001"];

    [dic removeObjectForKey:@"dicKey001"];

    //删除“字典记录”

    

    //写入文件

    [dic writeToFile:dataFile atomically:YES];

    

    NSDictionary* dicResult = [NSDictionary dictionaryWithContentsOfFile:dataFile];

    NSLog(@"修改结果:\n%@",dicResult);

}

   运行结果:

   

  各个目录的获取:

  http://www.cnblogs.com/ios-wmm/p/3299695.html

  如果是操作 Resource下的plist文件,可由以下代码完成:只能读,不能写

-(void)resourcePathFileRead{

    NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"resourceData" ofType:@"plist"];

    NSMutableDictionary *data = [[NSMutableDictionary alloc] initWithContentsOfFile:plistPath];

    NSLog(@"resourceData.plist文件信息如下:\n%@", data);

}

三、ios程序的“沙箱原理”

  xcode6中的模拟器位置:

  /Users/wuxiaofeng/资源库/Developer/

  3个基本目录:

  

  原理:

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

  参考:沙箱,路径获取,文件操作

  http://www.cnblogs.com/dyllove98/archive/2013/07/30/3225955.html

你可能感兴趣的:(plist)