最近遇到ios上文件读写操作的有关知识,记录下来,以便以后查阅,同时分享与大家。

一,简单介绍一下常用的plist文件。

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

二,先说文件保存到的几个位置:

1,工程沙盒里(就是程序user Document文件夹下,以读取文件,写入文件方式)

2,工程自身里(就是在工程里手动创建一个如.plist文件,把固定的内容写入,这个需要人工手动写入)

3,工程沙盒里(保存到user Document下,不过不需要读写文件,用系统的 NSUserDefaults 可以快速保存添加读取删除基本数据类型,类似于android里的Sharedpreferences )

先看截图吧

控制台输出的为工程下plist文件和沙盒文件的路径,通过截图我们可以看到,前缀都是统一的,只是到了程序的文件夹后,一个是appname.app,另一个是Documents下。所以存放位置还是不一样的。

首先说一下,工程下的.plist是我们不能在代码中写入的,可以读取,但是不可以写入(目前我是这样的结论,猜测应该是apple为了安全限制的),所以,代码中进行文件写等操作只能在沙盒路径下的文件中操作。

(程序常用固定数据,比如离线地图数据,各城市经纬度信息等需要我们绑定到程序里(比UserDocument安全),那么,可以代码循环写入,把.plist写在沙盒内,然后手动copy到工程目录下,这样就不用我们手动添加啦)

三,三种方式的读写操作。

1-1,创建plist文件。

按command +N快捷键创建,或者File —> New —> New File,选择Resource 下的Property List

1-2,工程路径plist文件读取。

  1. //path 读取当前程序定义好的provinces.plist省份城市文件
  2. NSString *path = [[NSBundle mainBundle] pathForResource:@"provinces" ofType:@"plist"];
  3. NSDictionary *data = [NSDictionary dictionaryWithContentsOfFile:path];
  4. self.provincesContent = [NSArray arrayWithArray:[data objectForKey:@"province"]];//array数组的名称就叫province

1-3,读取后赋值给我们相应的数据类型,就可以直接使用了,就是这么简单。

2-1,沙盒路径plist文件的读取。

  1. NSArray *patharray = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
  2. NSString *path =  [patharray objectAtIndex:0];
  3. NSString *filepath=[path stringByAppendingPathComponent:@"provinces.plist"];//添加我们需要的文件全称
  4. //获取此路径下的我们需要的数据(NSArray,NSDictionary,NSString...)
  5. NSMutableArray *rootArray = [NSMutableArray arrayWithContentsOfFile:filepath];//注意,如果想添加新的数据,需要NSMutable类型的

2-2,如果document里没有此文件,会自动创建,读取赋值后,便可使用,同时可以add,update,和remove,具体看上面的截图,一目了然。

3-1,NSUserDefaults快速读写,利用系统提供的方法,我们可以快速保存简单数据类型,如用户登录用户名密码。

  1. NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];//获取标准函数对象
  2. NSMutableDictionary *defaultcoordinate = [defaults objectForKey:@"default_coordinate"];//通过对象获取名称下NSMutableDictionary数据
  3. NSString *currentCity = [defaultcoordinate objectForKey:@"c_name"];

3-2,增删改,一看便会。

  1. [defaults setObject:@"kaka" forKey:@"newdata"];//添加id对象类型数据
  2. [defaults objectForKey:@"newdata"];//获取对象类型数据
  3. [defaults setDouble:2013 forKey:@"double"];//添加double类型数据
  4. [defaults doubleForKey:@"double"];//获取double类型数据
  5. [defaults setBool:NO forKey:@"BOOL"];//添加BOOL类型数据
  6. [defaults boolForKey:@"BOOL"];//获取BOOL类型数据
  7. [defaults setInteger:12 forKey:@"int"];//添加int类型数据
  8. [defaults integerForKey:@"int"];//获取int类型数据
  9. [defaults setFloat:0.23 forKey:@"float"];//添加Float类型数据
  10. [defaults floatForKey:@"float"];//获取float类型数据
  11. [defaults removeObjectForKey:@"newdata"];//删除对象数据

3-3,操作之后记得Synchronize同步操作,否则偶然会因为别的线程占大量内存而没有保存成功

  1. [defaults synchronize];

四,沙盒文件打开的方法:

1,可以通过 系统带的 终端工具,在bash命令行模式定位到

2,Finder菜单-前往 此时按住键盘的:option按键,就会显示出:资源库,点击进入

有关文件操作,先写到这里,更复杂的NSData或sqlite保存,以后用到,学到时再补充吧。

ios 简单的plist文件读写操作(Document和NSUserDefaults)的更多相关文章

  1. ios本地文件内容读取,.json .plist 文件读写

    ios本地文件内容读取,.json .plist 文件读写 本地文件.json .plist文件是较为常用的存储本地数据的文件,对这些文件的操作也是一种常用的基础. 本文同时提供初始化变量的比较标准的 ...

  2. (转)IOS之Info.plist文件简介

    原文:IOS之Info.plist文件简介 http://www.apkbus.com/android-130240-1-1.html (出处: Android开发论坛 - 安卓开发论坛 - Andr ...

  3. c语言文件读写操作总结

    C语言文件读写操作总结 C语言文件操作 一.标准文件的读写 1.文件的打开 fopen() 文件的打开操作表示将给用户指定的文件在内存分配一个FILE结构区,并将该结构的指针返回给用户程序,以后用户程 ...

  4. python里文件读写操作

    文件读写操作一种基本操作,但是里面也存在很多需要注意的问题,例如字符编码.内存缓冲.指针位置等等.如果忽视这些问题就会引起很多不必要的麻烦.简单来说,文件的读写分为几个过程: 打开文件,并定义操作文件 ...

  5. Kotlin入门(27)文件读写操作

    Java的文件处理用到了io库java.io,该库虽然功能强大,但是与文件内容的交互还得通过输入输出流中转,致使文件读写操作颇为繁琐.因此,开发者通常得自己重新封装一个文件存取的工具类,以便在日常开发 ...

  6. python 文件读写操作(24)

    以前的代码都是直接将数据输出到控制台,实际上我们也可以通过读/写文件的方式读取/输出到磁盘文件中,文件读写简称I/O操作.文件I/O操作一共分为四部分:打开(open)/读取(read)/写入(wri ...

  7. Kotlin入门-文件读写操作

    转 https://blog.csdn.net/aqi00/article/details/83241762 Java的文件处理用到了io库java.io,该库虽然功能强大,但是与文件内容的交互还得通 ...

  8. [转]Android - 文件读写操作 总结

     转自:http://blog.csdn.net/ztp800201/article/details/7322110 Android - 文件读写操作 总结 分类: Android2012-03-05 ...

  9. PHP文件读写操作之文件写入代码

    在PHP网站开发中,存储数据通常有两种方式,一种以文本文件方式存储,比如txt文件,一种是以数据库方式存储,比如Mysql,相对于数据库存储,文件存储并没有什么优势,但是文件读写操作在基本的PHP开发 ...

随机推荐

  1. jQuery Mobile 学习

    jQuery Mobile 学习系列 http://blog.csdn.net/bao990423420/article/details/13995021

  2. hadoop伪分布式安装

    hadoop的伪分布安装:一台实体机或虚拟机的安装. 环境:Windows7.VMWare.CentOS 1.1 设置ip地址 说明:在CentOS中的网络的类型: 仅主机模式:虚拟机在Windows ...

  3. 阿里云资深DBA专家罗龙九:云数据库十大经典案例分析【转载】

    阿里云资深DBA专家罗龙九:云数据库十大经典案例分析 2016-07-21 06:33 本文已获阿里云授权发布,转载具体要求见文末 摘要:本文根据阿里云资深DBA专家罗龙九在首届阿里巴巴在线峰会的&l ...

  4. springmvc json数据

    的 @RequestMapping("/getAllEdu") @ResponseBody public void getAllEdu(HttpServletRequest req ...

  5. getWriter() has already been called for this response 的解决办法

    getWriter() has already been called for this response response已经被其他对象调用了,导致无法继续使用如下 类似的方法 PrintWrite ...

  6. nginx 502错误

    一些运行在Nginx上的网站有时候会出现“502 Bad Gateway”错误,有些时候甚至频繁的出现.以下是小编搜集整理的一些Nginx 502错误的排查方法,供参考: Nginx 502错误的原因 ...

  7. constraint 摘自群主大大

    CONSTRAINT 子句 限制和索引相似,虽然限制也能被用于建立和另一个表的关联. 用 ALTER TABLE 和 CREATE TABLE 语句中的 CONSTRAINT 子句来建立或删除条件.C ...

  8. OpenGL学习--------颜色的选择

    OpenGL支持两种颜色模式:一种是RGBA,一种是颜色索引模式.无论哪种颜色模式,计算机都必须为每一个像素保存一些数据.不同的是,RGBA模式中,数据直接就代表了颜色:而颜色索引模式中,数据代表的是 ...

  9. article标签

    <html><head lang="en"> <meta charset="UTF-8"> <title>富士康 ...

  10. Struts2利用注解实现action跳转

    使用注解来配置Action的最大好处就是可以实现零配置,但是事务都是有利有弊的,使用方便,维护起来就没那么方便了. 要使用注解方式,我们必须添加一个额外包:struts2-convention-plu ...