==========================

文件操作

==========================

Δ一 .plist文件

.plist文件是一个属性字典数组的一个文件;

.plist文件可以用来存储:字典、数组、字符串等对象数据,可以混搭存储

【注】iOS开发中,plist文件一般用于app的配置信息

【注】ios开发工程中,允许多个plist文件共存。

【注】plist文件用来存储小数据量的数据

优点:可视化以及可编辑性非常方便

plist文件的操作

// 例如

NSString* str = @"我是\"美国人\"\n,我爱\"美国\"";

NSLog(@"%@",str);

1.创建plist文件

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

[dic setObject: @"张三" forKey: @"name"];

[dic setObject: @"李四" forKey: @"name1"];

[dic  setObject: @"王二" forKey: @"name2"];

//【注】如果key相同,数据会被冲掉

[dic setObject: @"zhangsan" forKey: @"name"];

// 把数据写入文件

//【了解】atomically

// atomically:参数意思,原子操作

// 如果atomically的参数是yes,程序会把数据先备份一下,等全部写入到了缓存中再一次性写入文件

// 如果atomically的参数是no,程序会直接把数据写入缓存

[dic writeToFile:Path atomically:YES];

2.创建一种多键值的plist文件

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

[plugin1 setObject: @"张三1" forKey: @"name1"];

[plugin1 setObject: @"李四" forKey: @"name2"];

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

[plugin2 setObject: @"王二" forKey: @"name1"];

[plugin2 setObject: @"赵五" forKey: @"name2"];

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

[listDic setObject:plugin1 forKey: @"初中一班"];

[listDic setObject:plugin2 forKey: @"初中二班"];

[listDic setObject: @"一哥" forKey: @"name"];

[listDic writeToFile:Path atomically:YES];

3.对某一个属性进行修改

//∆∆∆∆首先应该先读取当前plist文件,读出所有数据

// 读取指定目录下的文件内容

NSMutableDictionary* appList = [[NSMutableDictionary alloc]initWithContentsOfFile:Path];

[appList setObject: @"二哥" forKey: @"name"];

NSMutableDictionary* chu1 = [appList objectForKey: @"初中一班"];

NSString* name1 = [chu1 objectForKey: @"name1"];

[[appList objectForKey: @"初中一班"] objectForKey: @"name1"];

// 通过取出的内容,重新组合一个新的内容,把新的内容数据重新存入plist中

[chu1 setObject:@"qianqian" forKey: @"name1"];

[appList setObject:chu1 forKey: @"初中一班"];

[appList writeToFile:Path atomically:YES];

【总结】

1.plist文件操作其实就是一个根目录是字典,内部数据各种嵌套操作。

2.如果想要修改plist中的某个字段内容,一层一层去找,找到后一层一层封装回来,重新写入文件。(文件的覆盖过程)

3.plist不允许出现key值重名,如果重名,会把之前的名称下的值给冲掉。

二.NSUserDefault 对文件进行存储的类

1. NSUserDefault是一个本地数据存储类,可以存储小数据量的信息。

2. NSUserDefault 在iOS中常用来存储用户的个人信息,以及登陆注册信息。

【注】到目前为止,大家所学的归档、写文件、NSUserDefault都是存储小数据量信息的类,他们可以存储大数据量但是会出现性能问题。存储大数据量信息用【数据库】

【数据库】

1.SQlite 底层的数据,需要自己手动去创建数据库文件(db),并且需要手动去书写sqlite 语句;

2.【core data】是苹果公司提供的一种数据库存储、查询、修改、删除等操作一种解决方案;core data数据库其实就是一个对sqlit3进行封装的类库。

3.第三方数据库。

Δ【学习NSUserDefault】

   // userDefault Demo

// NSUserDefaults 是一个单例类,调用单例方法

NSUserDefaults* defaul = [NSUserDefaults standardUserDefaults];

// 设置key和value

[defaul setObject: @"15588605664" forKey: @"userName"];

[defaul setObject: @"123456" forKey: @"password"];

NSArray* classInfo = @[@"初中一班", @"66个同学", @"平均成绩99.98", @{@"key":@"value"}];

[defaul setObject:classInfo forKey: @"clss_Info"];

[defaul setObject: @"1" forKey: @"status"];

[defaul setBool:YES forKey: @"status"];

[defaul setInteger:1 forKey: @"int"];

[defaul setObject:[NSNumber numberWithBool:YES] forKey: @"status1"];

[defaul setFloat:0.15 forKey: @"float"];

//   把刚才设置的内容存储到程序给NSUserDefaults所分配的空间文件中

//   系统会把NSUserDefaults存储的文件都放到app的一个指定的目录,其实这个目录就是在根目录的library目录下一个新的目录下

// ∆∆∆∆[注]synchronize 一定要写这个方法,可以确保数据万无一失,如果不写这个方法,可能会存在数据没有保存成功的情况,例如在多线程中进行数据保存;

[defaul synchronize];

// =================================

// 读取文件的方式

NSString* userName = [defaul objectForKey: @"userName"];

NSString* pwd = [defaul objectForKey: @"password"];

// 只要是牵扯到key和value的,那么存储的时候key怎么写,取的时候,key必须怎么写

// 只要是牵扯到key和value的,那么存储的key如果一样,肯定会发生覆盖

NSArray* ClassAllInfo = [defaul objectForKey: @"clss_Info"];

BOOL isok = [defaul objectForKey: @"status"];

float f1 = [defaul floatForKey: @"float"];

NSInteger i = [defaul integerForKey: @"int"];

BOOL b = [defaul boolForKey: @"status"];

NSLog(@"用户的登陆信息是:\n%@\n%@", userName, pwd);

NSLog(@"%@",ClassAllInfo);

【注】NSUserDefault 可以存储的数据类型有:NSNumber(NSInterger、flost、double),NSDictionary,NSArray、Bool,NSString这些数据类型

Δ.【扩展知识— c语言 转义字符】

转义字符就是用来解决程序中的一些特殊符号导致编码出错的问题。比如:

【注】对要进行转义的字符每个前面都要写 \

1.‘

2.“

3. 回车

4.等等非常多

【扩展】

1.编程中文件的命名最好不要有中文、空格、特殊符号(因为计算机会对中文或者空格或者特殊符号进行转义)

2.文件和内存数据之间的转换关系

cpu(计算机处理数据大脑)所有的数据都是按照cpu的指令去调度执行

本地文件——>内存           (读的过程)

内存      ——>本地文件     (写的过程)

【注】代码中定义的变量或者对象变量,这些变量的内容都是在内存中存储运算。如果想把一些有用的信息永久保留,就需要把信息保存到文件中。

(1).内存中的数据,都是一些临时数据,当计算机发生意外情况(断电),内存中的数据都会消失;

(2).把内存中的输入写入到文件中,就可以永久保存,只要文件没有被删除。

三.json格式解析

1.json

2.xml

【比较】xml格式出现的比json格式早,xml就是表单(表格)(<body>name</body>),xml最致命的缺点就是可阅读性不高,导致程序员解析比较麻烦。xml优点是应用到大数据量。但是,随着移动端的兴起,json这种格式也开始流行。逐渐成为ios平台和安卓平台app端获取数据一种格式。json格式优点:格式清晰,应用于小数据量的获取。

// 例如

#import <Foundation/Foundation.h>

#import "MyModel.h"

#import "UserModel.h"

#define PATH @"http://m2.qiushibaike.com/article/list/latest?page=1&count=30&rqcnt=21&r=a1ef5f561429944164282"

int main(int argc, const char * argv[]) {

@autoreleasepool {

// 协议很多种:http  ftp  mail  file socket xmpp

// url格式:  协议://域名(ip地址):端口/路径 ?参数列表(以&符间隔每个参数)

// 将字符串转换成NSURL类型

NSURL *url = [NSURL URLWithString:PATH];

// 通过url获取数据

// NSData *data1 = [[NSData alloc] initWithContentsOfFile: @""];

NSData *data = [[NSData alloc] initWithContentsOfURL:url];

//  NSLog(@"%@",data);

NSError *error = nil;

// NSJSONSerialization苹果系统自带解析,此方法是把data解析成NSDictionary 操作读取可变内容

NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&error];

if (error) {

NSLog(@"解析失败");

exit(-1);

}

NSLog(@"%@",dic);

NSArray *array = [dic objectForKey:@"items"];

//  NSLog(@"%@",array);

// 创建一个可变数组用于存放myModel这个模型

NSMutableArray *dataArray = [[NSMutableArray alloc] init];

for (int i = 0; i < array.count; i++) {

MyModel *myModel = [[MyModel alloc] init];

NSDictionary *dicItem = array[i];

// 这里的key一定要对应url返回来字段值

myModel.content = [dicItem objectForKey: @"content"];

myModel.modelId = [dicItem objectForKey: @"id"];

if (![[dicItem objectForKey:@"user"] isMemberOfClass:[NSNull class]] ) {

NSDictionary *userDic = [dicItem objectForKey: @"user"];

UserModel *userModel = [[UserModel alloc] init];

//  NSLog(@"%@",[userDic objectForKey: @"avatar_updated_at"]);

userModel.avatar_updated_at = [userDic objectForKey: @"avatar_updated_at"];

userModel.created_at = [userDic objectForKey: @"created_at"];

userModel.last_device = [userDic objectForKey: @"last_device"];

myModel.user = userModel;

}

[dataArray addObject:myModel];

}

//  NSLog(@"可变数组个数:%lu",dataArray.count);

for (MyModel *myModel in dataArray) {

NSLog(@"content:%@,modelId:%@", myModel.content, myModel.modelId);

UserModel *userModel = myModel.user;

NSLog(@"更新时间:%@,创建时间:%@,最终设备:           %@",  userModel.avatar_updated_at, userModel.created_at,  userModel.last_device);

}

}

return 0;

}

#import <Foundation/Foundation.h>

#import "UserModel.h"

@interface MyModel : NSObject

@property (nonatomic,copy) NSString *content;

@property (nonatomic,copy) NSString *modelId;

@property (nonatomic,strong) UserModel *user;

@end

#import <Foundation/Foundation.h>

@interface UserModel : NSObject

@property (nonatomic,copy) NSString *avatar_updated_at;

@property (nonatomic,copy) NSString *created_at;

@property (nonatomic,copy) NSString *last_device;

@end

【注】可以利用http://www.bejson.com/     对json格式进行校验并规整。

plist文件、NSUserDefault 对文件进行存储的类、json格式解析的更多相关文章

  1. 【spark】文件读写和JSON数据解析

    1.读文件 通过 sc.textFile(“file://") 方法来读取文件到rdd中. val lines = sc.textFile("file://")//文件地 ...

  2. Swift - .plist文件数据的读取和存储

    每次在Xcode中新建一个iOS项目后,都会自己产生一个.plist文件,里面记录项目的一些配置信息.我们也可以自己创建.plist文件来进行数据的存储和读取. .plist文件其实就是一个XML格式 ...

  3. [Xcode 实际操作]七、文件与数据-(9)编码创建Plist文件(属性列表文件)

    目录:[Swift]Xcode实际操作 本文将演示如何通过编码的方式,创建属性列表文件. 在项目导航区,打开视图控制器的代码文件[ViewController.swift] import UIKit ...

  4. [Xcode 实际操作]七、文件与数据-(8 )读取和解析Plist文件(属性列表文件)

    目录:[Swift]Xcode实际操作 本文将演示如何读取和解析Plist文件,即属性列表文件. 它是用来存储,串行化后的对象的文件. 在项目名称上点击鼠标右键,弹出右键菜单, 选择[New File ...

  5. Excel文件转plist文件出现的文件编码问题

    今天在测试时遇到了需要将大量整理好的Excel数据转换为plist文件的情况.百度了一下教程,发现虽然别人也遇到过类似的情况,但是有些讲的还是不够细致.所以做如下整理.   百度到的内容中有使用Mes ...

  6. 将DataSet(DataTable)转换成JSON格式(生成JS文件存储)

    public static string CreateJsonParameters(DataTable dt) { /**/ /**/ /**/ /* /*********************** ...

  7. Qt之QDomDocument操作xml文件-模拟ini文件存储

    一.背景 不得不说Qt是一个很强大的类库,不管是做项目还是做产品,Qt自身封装的东西就已经非常全面了,我们今天的这篇文章就是模拟了Qt读写ini文件的一个操作,当然是由于一些外力原因,我们决定自己来完 ...

  8. 上传文件到aws的s3存储

    只要有aws-cli客户端就可以上传文件到aws的S3存储.可以在任意机器上.这里以centos为例. 1.安装python.pip. # yum install -y python python-p ...

  9. InnoDB存储引擎的表空间文件,重做日志文件

    存储引擎文件:因为MySQL表存储引擎的关系,每个存储引擎都会有自己的文件来保存各种数据.这些存储引擎真正存储了数据和索引等数据. 表空间文件 InnoDB存储引擎在存储设计上模仿了Oracle,将存 ...

随机推荐

  1. [转]Java实现定时任务的三种方法

    在应用里经常都有用到在后台跑定时任务的需求.举个例子,比如需要在服务后台跑一个定时任务来进行非实时计算,清除临时数据.文件等.在本文里,我会给大家介绍3种不同的实现方法: 普通thread实现 Tim ...

  2. ASP.NET Web API Model-ValueProvider

    ASP.NET Web API Model-ValueProvider 前言 前面一篇讲解了Model元数据,Model元数据是在Model绑定中很重要的一部分,只是Model绑定中涉及的知识点比较多 ...

  3. maven repo plugin archiver

    Failure to transfer org.apache.maven:maven-archiver:pom:2.4.1 from http://repo1.maven.org/xxx was ca ...

  4. 10 Minutes to pandas

    摘要   一.创建对象 二.查看数据 三.选择和设置 四.缺失值处理 五.相关操作 六.聚合 七.重排(Reshaping) 八.时间序列 九.Categorical类型   十.画图      十一 ...

  5. Atitit 图像处理类库大总结attilax qc20

    Atitit 图像处理类库大总结attilax qc20 1.1. 选择与组合不同的图像处理类库1 1.2. Halcon 貌似商业工具,功能强大.1 1.3. Openvc  Openvc功能也是比 ...

  6. Android ButterKnife配置使用

    ButterKnife在GitHub的地址:https://github.com/JakeWharton/butterknife 最新的版本是:8.4.0 app 模块的build.gradle: a ...

  7. React.js实现原生js拖拽效果及思考

    一.起因&思路 不知不觉,已经好几天没写博客了...近来除了研究React,还做了公司官网... 一直想写一个原生js拖拽效果,又加上近来学react学得比较嗨.所以就用react来实现这个拖 ...

  8. jQuery2.x源码解析(设计篇)

    jQuery2.x源码解析(构建篇) jQuery2.x源码解析(设计篇) jQuery2.x源码解析(回调篇) jQuery2.x源码解析(缓存篇) 这一篇笔者主要以设计的角度探索jQuery的源代 ...

  9. Android指纹识别深入浅出分析到实战(6.0以下系统适配方案)

    指纹识别这个名词听起来并不陌生,但是实际开发过程中用得并不多.Google从Android6.0(api23)开始才提供标准指纹识别支持,并对外提供指纹识别相关的接口.本文除了能适配6.0及以上系统, ...

  10. kafka性能参数和压力测试揭秘

    转自:http://blog.csdn.net/stark_summer/article/details/50203133 上一篇文章介绍了Kafka在设计上是如何来保证高时效.大吞吐量的,主要的内容 ...