iPhone开发之.plist文件增删改查操作

主要操作:

1.//获得plist路径    -(NSString*)getPlistPath;

2.//判断沙盒中名为plistname的文件是否存在    -(BOOL) isPlistFileExists;

3.//读取沙盒中Document文件夹下的BookList.plist文件

    [NSMutableDictionarydictionaryWithContentsOfFile:plistPath];

4.//写入文件     if ([plistDictionary writeToFile:plistPath atomically:YES])

 

WBBooksManager.m文件:

#import "WBBooksManager.h"

@implementation WBBooksManager

static WBBooksManager *g_instance = nil;

+ (WBBooksManager *)sharedInstance
{
    @synchronized(self) {
        if ( g_instance == nil ) {
            g_instance = [[self alloc] init];
        }
    }
    return g_instance;
}

//获得plist路径
-(NSString*)getPlistPath{
    //沙盒中的文件路径
    NSArray *storeFilePath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *doucumentsDirectiory = [storeFilePath objectAtIndex:0];
    NSString *plistPath =[doucumentsDirectiory stringByAppendingPathComponent:@"WBBooks.plist"];       //根据需要更改文件名
    return plistPath;
}

//判断沙盒中名为plistname的文件是否存在
-(BOOL) isPlistFileExists{

    NSString *plistPath =[[WBBooksManager sharedInstance]getPlistPath];
    NSFileManager *fileManager = [NSFileManager defaultManager];
    if( [fileManager fileExistsAtPath:plistPath]== NO ) {
        NSLog(@"not exists");
        return NO;
    }else{
        return YES;
    }
    
}

-(void)initPlist{
    NSString *plistPath = [[WBBooksManager sharedInstance] getPlistPath];
    
    //如果plist文件不存在,将工程中已建起的plist文件写入沙盒中
    if (! [[WBBooksManager sharedInstance] isPlistFileExists]) {
        
        //从自己建立的plist文件 复制到沙盒中 ,方法一
        NSError *error;
        NSFileManager *fileManager = [NSFileManager defaultManager];
        NSString *bundle = [[NSBundle mainBundle] pathForResource:@"WBBooks" ofType:@"plist"];
        [fileManager copyItemAtPath:bundle toPath:plistPath error:&error];
        
        //方法二
        //        NSString *path = [[NSBundle mainBundle] pathForResource:@"WBBooks"ofType:@"plist"];
        //        NSMutableDictionary *activityDics = [[NSMutableDictionary alloc] initWithContentsOfFile:path];
        //        [activityDics writeToFile:plistPath atomically:YES];
    }
}


//判断key的书是否存在
-(BOOL)isBookExistsForKey:(NSString*)key{
    
    NSString *plistPath = [[WBBooksManager sharedInstance] getPlistPath];
    NSMutableDictionary *WBBooksDictionary = [[NSMutableDictionary alloc] initWithContentsOfFile:plistPath]; 
    
    //根目录下存在名为bookname的字典
    if ([WBBooksDictionary objectForKey:key]) {
        return YES;
    }else{
        return NO;
    }
}


//根据key值删除对应书籍
-(void)removeBookWithKey:(NSString *)key{
    
    NSString *plistPath = [[WBBooksManager sharedInstance] getPlistPath];
    NSMutableDictionary *WBBooksDictionary = [[NSMutableDictionary alloc] initWithContentsOfFile:plistPath];
    
    [WBBooksDictionary removeObjectForKey:key];
    [WBBooksDictionary writeToFile:plistPath atomically:YES]; //删除后重新写入
    
}



//删除plistPath路径对应的文件
-(void)deletePlist{
    
    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSString *plistPath = [[WBBooksManager sharedInstance] getPlistPath];
    [fileManager removeItemAtPath:plistPath error:nil];
    
}

//将dictionary写入plist文件,前提:dictionary已经准备好
-(void)writePlist:(NSMutableDictionary*)dictionary forKey:(NSString *)key{
    
    NSMutableDictionary *plistDictionary = [[NSMutableDictionary alloc]init];    
    
    //如果已存在则读取现有数据
    if ([[WBBooksManager sharedInstance]isPlistFileExists]) {
        plistDictionary = [[WBBooksManager sharedInstance]readPlist];
    }

        
    
    //增加一个数据
    [plistDictionary setValue:dictionary forKey:key]; //在plistDictionary增加一个key为...的value
    
    NSString *plistPath = [[WBBooksManager sharedInstance] getPlistPath];
    
    if([plistDictionary writeToFile:plistPath atomically:YES]){
        NSLog(@"write ok!");
    }else{
        NSLog(@"ddd");
    }
    
}

//
-(NSMutableDictionary*)readPlist{
    
    NSString *plistPath = [[WBBooksManager sharedInstance] getPlistPath];
    NSMutableDictionary *resultDictionary = [[NSMutableDictionary alloc]initWithContentsOfFile:plistPath];
    return resultDictionary;
}

//读取plist文件内容复制给dictionary   备用
-(void)readPlist:(NSMutableDictionary **)dictionary{
    NSString *plistPath = [[WBBooksManager sharedInstance] getPlistPath];
    *dictionary = [[NSMutableDictionary alloc] initWithContentsOfFile:plistPath];
}

//更改一条数据,就是把dictionary内key重写
-(void)replaceDictionary:(NSMutableDictionary *)newDictionary withDictionaryKey:(NSString *)key{

    [[WBBooksManager sharedInstance]removeBookWithKey:key];
    [[WBBooksManager sharedInstance]writePlist:newDictionary forKey:key];

}


-(NSInteger)getBooksCount{
    
    NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] init];
    dictionary = [[WBBooksManager sharedInstance] readPlist];
    return [dictionary count];
    
}

 

调用方法:

 //导入头文件
#import "WBBooksManager.h"

-(void)viewDidLoad中添加以下代码,是刚写的时候测试时用的,狠时繁杂。  将就着看好了、

 WBBooksManager *sss = [[WBBooksManager alloc] init ];
    
    NSString *plistPath =[[WBBooksManager sharedInstance] getPlistPath];

    if( [sss isPlistFileExists]== NO ) {//不存在
        
        NSLog(@"WBBooks.plist not exists ,build it.");
    

        
        NSMutableDictionary *addDictionary1 = [[NSMutableDictionary alloc] init];
        NSString *addName1 = [NSString stringWithFormat:@"www"];
        NSNumber *addNumber1 = [[NSNumber alloc] initWithInt:13223];
        [addDictionary1 setValue:addName1 forKey:@"name"];
        [addDictionary1 setValue:addNumber1 forKey:@"list"];
        [[WBBooksManager sharedInstance]writePlist:addDictionary1 forKey:@"Add1"];

        
        NSMutableDictionary *addDictionary2 = [[NSMutableDictionary alloc] init];
        NSString *addName2 = [NSString stringWithFormat:@"aaas"];
        NSNumber *addNumber2 = [[NSNumber alloc] initWithInt:123];
        [addDictionary2 setValue:addName2 forKey:@"name"];
        [addDictionary2 setValue:addNumber2 forKey:@"list"];
        [[WBBooksManager sharedInstance]writePlist:addDictionary2 forKey:@"Add2"];
        
    }

    NSMutableDictionary *resultDictionary = [[NSMutableDictionary alloc] init];
    [[WBBooksManager sharedInstance] readPlist:&resultDictionary];
    NSLog(@"add1的结果%@", resultDictionary);   
    
    NSArray *array = [resultDictionary allKeys];  //所有的Book
    
    int num =  [[WBBooksManager sharedInstance] getBooksCount]; //总数
    NSLog(@"array%@ %d",array,num);
    
       
    NSMutableDictionary *plistDictionary = [[NSMutableDictionary alloc]init];    
    plistDictionary = [[WBBooksManager sharedInstance]readPlist];

    NSMutableDictionary *addDictionary2 = [[NSMutableDictionary alloc] init];
    NSString *addName2 = [NSString stringWithFormat:@"dafd"];
    NSNumber *addNumber2 = [[NSNumber alloc] initWithInt:321];
    [addDictionary2 setValue:addName2 forKey:@"name"];
    [addDictionary2 setValue:addNumber2 forKey:@"list"];
    
    [plistDictionary setValue:addDictionary2 forKey:@"Add2"];
    [plistDictionary writeToFile:plistPath atomically:YES];
    
    
    
    
    resultDictionary = [[NSMutableDictionary alloc] init];
    [[WBBooksManager sharedInstance] readPlist:&resultDictionary];
    NSLog(@"add1的结果%@", resultDictionary);   
    
    array = [resultDictionary allKeys];  //所有的Book
    
    num =  [[WBBooksManager sharedInstance] getBooksCount]; //总数
    NSLog(@"array%@ %d",array,num);

    
    
    
    NSMutableDictionary *addDictionary1 = [[NSMutableDictionary alloc] init];
    
    NSString *addName1 = [NSString stringWithFormat:@"wmmm"];
    NSNumber *addNumber1 = [[NSNumber alloc] initWithInt:123];
    [addDictionary1 setValue:addName1 forKey:@"name"];
    [addDictionary1 setValue:addNumber1 forKey:@"list"];
   
    //判断给出的Key对应的数据是否存在
    if ([[WBBooksManager sharedInstance] isBookExistsForKey:@"Add1"]) {
        //存在,则替换之
        NSLog(@"存在,则替换之");
        [[WBBooksManager sharedInstance] replaceDictionary:addDictionary1 withDictionaryKey:@"Add1"];
    }else{//不存在,则写入
        NSLog(@"不存在,则写入");
        [[WBBooksManager sharedInstance] writePlist:addDictionary1 forKey:@"Add1"];
    }

    
    resultDictionary = [[NSMutableDictionary alloc] init];
    [[WBBooksManager sharedInstance] readPlist:&resultDictionary];
    NSLog(@"add1的结果%@", resultDictionary);   
    
    array = [resultDictionary allKeys];  //所有的Book
    
    num =  [[WBBooksManager sharedInstance] getBooksCount]; //总数
    NSLog(@"array%@ %d",array,num);

    
    
    addName1 = [NSString stringWithFormat:@"wmmm"];
    addNumber1 = [[NSNumber alloc] initWithInt:123];
    [addDictionary1 setValue:addName1 forKey:@"name"];
    [addDictionary1 setValue:addNumber1 forKey:@"list"];
    
    //更改key对应的数据
    if ([[WBBooksManager sharedInstance] isBookExistsForKey:@"Add1"]) {
        [[WBBooksManager sharedInstance] replaceDictionary:addDictionary1 withDictionaryKey:@"Add1"];
    }
    resultDictionary = [[WBBooksManager sharedInstance]readPlist];
    NSLog(@"add1111的结果%@", resultDictionary); 
    
    
    //删除给出key对应的数据
    if ([[WBBooksManager sharedInstance] isBookExistsForKey:@"Add1"]) {
        [[WBBooksManager sharedInstance] removeBookWithKey:@"Add1"];
    }   
    resultDictionary = [[WBBooksManager sharedInstance]readPlist];
    NSLog(@"add1111的结果%@", resultDictionary); 
    
    //删除整个plist文件
//    if ([[WBBooksManager sharedInstance]isPlistFileExists]) {
//    [[WBBooksManager sharedInstance] deletePlist];    
//    }
    
    resultDictionary = [[WBBooksManager sharedInstance]readPlist];
    NSLog(@"add1111的结果%@", resultDictionary); 

 



//附上主要操作
/*
1.NSMutableDictionary/NSDictionary //初始化 NSMutableDictionary *plistDictionary = [NSMutableDictionary dictionaryWithCapacity:0]; //将新的dictionary添加到olddictionary之后,若两dictionary具有相同的key,则更新 [oldDictionary addEntriesFromDictionary:[NSDictionary dictionaryWithDictionary: newDictionary]]; //给dictionary赋值 [plistDictionary setObject:oldDictionary forKey:key]; //移除某值 [plistDictionary removeObjectForKey:bookID]; //读取plistPath路径下的文件 NSMutableDictionary *nsmutableDictionary = [NSMutableDictionary dictionaryWithContentsOfFile:plistPath]; 2.NSMutableArray/NSArray //判断数组中是否包含某值 [bookIDArray containsObject:bookID] //移除某值 [contentArray replaceObjectAtIndex:j withObject:contentDictionary]; //写入数据 [plistDictionary writeToFile:plistPath atomically:YES]; */

 

posted @ 2012-08-26 19:53  小、  阅读(9651)  评论(1编辑  收藏  举报