plist,全名PropertyList,即属性列表文件,它是一种用来存储串行化后的对象的文件。这种文件,在ios开发过程中经常被用到。这种属性列表文件的扩展名为.plist,因此通常被叫做plist文件。文件是xml格式的。Plist文件是以key-value的形式来存储数据。既可以用来存储用户设置,也可以用来存储一些需要经常用到而不经常改动的信息。

在对plist文件的操作有创建,删除,写入和读取。这四种操作中,写入和读取是比较常用的操作。

我第一次用是缓存登录信息 为了实现一键登录 免得每次都得输入账号和密码

我把整个操作plist过程封装成了类方法,因为每次都得读取路径 我以为会很慢,打算放入线程,可能是数据规模小,我就没放进线程。而且速度还是很快。

以下是类方法

@interface Function : NSObject
+(NSString *)CreateTheFolder_From:(NSString *)fileStyle FileHolderName:(NSString *)folderName FileName:(NSString *)fileName;//有文件夹则读取路径 无则创建之后再读取路径 并返回路径
+(NSString *)achieveThe_filepath:(NSString *)fileName Kind:(NSString *)fileStyle;//获取文件路径 或者文件夹路径 fileName 为文件夹名称或者带后缀的文件比如1.png
+(BOOL)judgeFileExist:(NSString * )fileName Kind:(NSString *)fileStyle;//判断文件是否存在 YES 存在 NO不存在
+(void)creatTheFile:(NSString *)fileName Kind:(NSString *)fileStyle;//创建一个名为fileName的文件
+(void)WriteToFile:(NSString *)fileName File:(NSDictionary *)dic Kind:(NSString *)fileSyle;//把file 写入名为fileName的文件
+(NSDictionary*)ReadFromFile:(NSString *)fileName Kind:(NSString *)fileStyle;//从名为fileName的文件 读取 数据内容
+(void)DeleteTheFile:(NSString *)fileName Kind:(NSString *)fileSyle;//删除文件操作
+(void)Revision_TheFile_Name:(NSString *)fileName File:(NSString *)txt Key:(NSString *)key Kind:(NSString *)fileStyle;//修改文件中某条信息记录
+(void)Delete_TotalFileFromPath:(NSString *)fileAndFolder_Path ;//删除路径下所有缓存文件包括文件夹自己
@end
//类方法的实施
#import "Function.h"
@implementation Function+(NSString*)CreateTheFolder_From:(NSString *)fileStyle FileHolderName:(NSString *)folderName FileName:(NSString *)fileName
{
//创建文件夹:
//查找路径的时候 会创建该文件夹 所以即使做删除所有文件包括文件夹后 最后查找路径的时候还是会被重新创建,这个路径就是该应用的归属 不错不是吗
NSString *filePath=[Function achieveThe_filepath:nil Kind:fileStyle];
filePath = [filePath stringByAppendingPathComponent:folderName];
BOOL isDir = NO;
NSFileManager *fileManager = [NSFileManager defaultManager];
BOOL existed = [fileManager fileExistsAtPath:filePath isDirectory:&isDir];
if ( !(isDir == YES && existed == YES) )
{
[fileManager createDirectoryAtPath:filePath withIntermediateDirectories:YES attributes:nil error:nil];
}
filePath = [filePath stringByAppendingPathComponent:fileName];
return filePath;
}
+(NSString *)achieveThe_filepath:(NSString *)fileName Kind:(NSString *)fileSyle
{
NSString *filePath;
if([fileSyle isEqual:Document])
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
//获取完整路径
NSString *documentsDirectory = [paths objectAtIndex:];
filePath = [documentsDirectory stringByAppendingPathComponent:fileName];
}
else if([fileSyle isEqual:Library_Cache])
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
//获取完整路径
NSString *documentsDirectory = [paths objectAtIndex:];
filePath = [documentsDirectory stringByAppendingPathComponent:fileName];
}
else//tmp
{
filePath=[NSString stringWithFormat:@"%@%@",NSTemporaryDirectory(),fileName];
}
return filePath;
} +(BOOL)judgeFileExist:(NSString * )fileName Kind:(NSString *)fileStyle
{
NSString *filepath=[Function CreateTheFolder_From:fileStyle FileHolderName:MyFolder FileName:fileName];
NSFileManager *fileManager = [NSFileManager defaultManager];
return [fileManager fileExistsAtPath:filepath];
//返回 YES 存在 NO不存在
}
+(void)creatTheFile:(NSString *)fileName Kind:(NSString *)fileStyle
{
NSString *filepath=[Function CreateTheFolder_From:fileStyle FileHolderName:MyFolder FileName:fileName];
NSFileManager* fm = [NSFileManager defaultManager];
[fm createFileAtPath:filepath contents:nil attributes:nil];
}
+(void)WriteToFile:(NSString *)fileName File:(NSDictionary *)dic Kind:(NSString *)fileStyle
{
NSString *filepath=[Function CreateTheFolder_From:fileStyle FileHolderName:MyFolder FileName:fileName];
[dic writeToFile:filepath atomically:YES];
}
+(NSDictionary *)ReadFromFile:(NSString *)fileName Kind:(NSString *)fileStyle
{ NSString *filepath=[Function CreateTheFolder_From:fileStyle FileHolderName:MyFolder FileName:fileName];
NSDictionary* dic = [NSDictionary dictionaryWithContentsOfFile:filepath];
return dic;
}
+(void)DeleteTheFile:(NSString *)fileName Kind:(NSString *)fileSyle
{
NSString *filepath=[Function achieveThe_filepath:fileName Kind:fileSyle];
//删除文件
NSFileManager *fm = [NSFileManager defaultManager];
[fm removeItemAtPath:filepath error:nil];
if([Function judgeFileExist:fileName Kind:fileSyle])
{
NSLog(@"删除失败");
}
else
{
NSLog(@"删除成功");
}
}
+(void)Revision_TheFile_Name:(NSString *)fileName File:(NSString *)txt Key:(NSString *)key Kind:(NSString *)fileSyle
{
NSString *filepath=[Function achieveThe_filepath:fileName Kind:fileSyle];
NSMutableDictionary *applist = [[NSMutableDictionary alloc] initWithContentsOfFile:filepath];
// 修改一个plist文件数据
[applist setObject:txt forKey:key];
//修改后直接把数据再写入文件
[applist writeToFile:filepath atomically:YES];
}
+(void)Delete_TotalFileFromPath:(NSString *)fileAndFolder_Path
{
[[NSFileManager defaultManager] removeItemAtPath:fileAndFolder_Path error:nil];
}
@end

具体的使用举例

//如果当前文件不存在 则创建文件 并且插入数据
//如果存在 则更改表数据 并 读取文件内容
//功能都是封装好 独立的 也可以删除 等
......
#import "Function.h"
#define login @ "login.plist"
#define Document @ "document"
#define Library_Cache @ "library_cache"
#define Tmp @ "tmp"
...... //比如以缓存登录账号和密码为例,每次打开应用判断是否登录,如果登录过 从缓存中读取账号和密码并显示。
如方法:
//上次是否登录过
-(void)isLoad_past
{
if([Function judgeFileExist:login Kind:Library_Cache])
{
NSDictionary* dic =[Function ReadFromFile:login Kind:Library_Cache];
textField_Account.text=[dic objectForKey:@"account"];
textField_Secret.text=[dic objectForKey:@"secret"];
}
}
/*
点击登录后
判断账号密码是否存在 存在 则更新
不存在 创建文件 写入文件
方法如下
*/
if([Function judgeFileExist:login Kind:Library_Cache])
{
// [Function DeleteTheFile:login];
[Function Revision_TheFile_Name:login File:textField_Account.text Key:@"account" Kind:Library_Cache];
[Function Revision_TheFile_Name:login File:textField_Secret.text Key:@"secret" Kind:Library_Cache];
}
else
{
NSMutableDictionary *dictplist = [[NSMutableDictionary alloc ] init];
//设置属性值
[dictplist setObject:textField_Account.text forKey:@"account"];
[dictplist setObject:textField_Secret.text forKey:@"secret"];
NSDictionary *dict=dictplist;
[Function creatTheFile:login Kind:Library_Cache];
[Function WriteToFile:login File:dict Kind:Library_Cache];
}
/*
做清理缓存操作时候 删除文件夹 及里面的所有文件

做清除缓存的删除操作的集合方法举例

NSString *str1= [Function achieveThe_filepath:MyFolder Kind:Library_Cache];

[Function Delete_TotalFileFromPath:str1];

*/

IOS plist轻量级操作的更多相关文章

  1. iOS多线程拾贝------操作巨人编程

    iOS多线程拾贝------操作巨人编程 多线程 基本 实现方案:pthread - NSThread - GCD - NSOperation Pthread 多平台,可移植 c语言,要程序员管理生命 ...

  2. iOS - SQLite Database 操作数据库

    iOS - SQLite Database 操作数据库   Sqlite 能被用在ios上做数据处理用,只要你懂得一点sql 就很容易使用sqlite 1:创建一个简单的View based appl ...

  3. IOS各种手势操作实例

    先看下效果 手势相关的介绍 IOS中手势操作一般是 UIGestureRecognizer 类的几个手势子类去实现,一般我们用到的手势就这么5种: 1.点击  UITapGestureRecogniz ...

  4. iOS子线程操作检测版本更新,有新版本通知用户更新, CheckVersion

    iOS子线程操作检测版本更新,有新版本通知用户更新 CheckVersion 一:如何使用: #import "CheckVersion.h" //输入你的app在appStore ...

  5. iOS 本地通知 操作

    iOS 本地通知 操作 1:配置通知:然后退出程序: UILocalNotification *localNotif = [[UILocalNotification alloc] init]; loc ...

  6. iOS开发之plist文件操作

    之前在想用代码去实现很多界面上能用interface builder可以拖进去的功能,现在想想真是够无知的啊.不仅效率低下,而且对于代码的维护带来不少麻烦,这段时间一直在反思看了design+code ...

  7. IOS , plist 配置项说明

    本文转载至 http://blog.csdn.net/fengsh998/article/details/8307424 Key:Application can be killed immediate ...

  8. iOS - Plist 数据解析

    前言 NS_AVAILABLE(10_6, 4_0) @interface NSPropertyListSerialization : NSObject 如果对象是 NSArray 或 NSDicti ...

  9. iOS开发-文件操作

    目录操作和文件管理 学习目标 1.理解单例 2.掌握NSFileManager类常用的文件管理操 3.掌握NSFileHandle类常用的文件数据操作 4.了解NSData类的常用操作 5.掌握Pli ...

随机推荐

  1. 【转】jsp页面中jstl标签详解

    原文地址: JSLT标签库,是日常开发经常使用的,也是众多标签中性能最好的.把常用的内容,放在这里备份一份,随用随查.尽量做到不用查,就可以随手就可以写出来.这算是Java程序员的基本功吧,一定要扎实 ...

  2. STL学习系列八:Set和multiset容器

    1.set/multiset的简介 set是一个集合容器,其中所包含的元素是唯一的,集合中的元素按一定的顺序排列.元素插入过程是按排序规则插入,所以不能指定插入位置. set采用红黑树变体的数据结构实 ...

  3. ACM之数学题

    数学题,始终记得,第一次被带飞师大校赛以及省赛,毫无例外的在数学题上卡死....因此,现在开始,有意识的保留遇见的数学题...(下列知识点按遇见先后顺序排列: 1欧拉公式 欧拉公式的用处是,找出小于N ...

  4. C++中使用接口

    面向对象的语言诸如JAVA提供了Interface来实现接口,但C++却没有这样一个东西,尽管C++ 通过纯虚基类实现接口,譬如COM的C++实现就是通过纯虚基类实现的(当然MFC的COM实现用了嵌套 ...

  5. HttpContext及HttpContext.current

    慎用System.Web.HttpContext.Current http://www.cnblogs.com/david1989/p/3879201.html 线程编程中用到HttpContext. ...

  6. INNO&&DELPHI

    好久不弄delphi了,再次见到inno,居然不知所措~ 让人亲切的 var,又见到了.而如今,到处可见. 整目录复制 Flags: igNoreversion recursesubdirs crea ...

  7. Win8增加了快速启动功能......

    (从已经死了一次又一次终于挂掉的百度空间人工抢救出来的,发表日期 2014-05-11) Win8增加了快速启动功能,能让计算机尽快的启动进入Windows界面.win8的这种快速启动功能只会在“关机 ...

  8. 上门洗车App 竟然是块大肥肉!

    http://www.leiphone.com/k-xiche-app-idea.html 打车App.租车App.防违规App我们见得多,但洗车App你一定没听过,之前在一次创业路演上碰到一个做上门 ...

  9. AVR 定点数运算程序设计及数制转换

    AVR 单片机有加法和减法指令,可以直接调用相关指令来达到目的. 这里列出了16位加法.16位带立即数加法. 16位减法.16位带立即数减法. 16位比较.16位带立即数比较程序和16位取补程序. a ...

  10. Eclipse配置PyDev插件

    安装python解释器 安装PyDev: 首先需要去Eclipse官网下载:http://www.eclipse.org/,Eclipse需要JDK支持,如果Eclipse无法正常运行,请到Java官 ...