目录操作和文件管理

学习目标

1.理解单例

2.掌握NSFileManager类常用的文件管理操

3.掌握NSFileHandle类常用的文件数据操作

4.了解NSData类的常用操作

5.掌握Plist文件读写

——————————————————————

通常程序在运行中或者程序结束之后,需要保存一些信息,而且需要持久化存储信息,比如登陆信息、视频播放记录、收藏记录等等,那么我们可以采用以下几种方式对数据进行持久化保存.

1.1单例模式(当前对象有且仅有一个实例)

好处:只有一个实例,数据共享。

单例模式是一种常用的设计模式。在应用这个模式时,

单例对象的类必须保证只有一个实例存在,而且自行实例化并向整个

系统提供这个实例。如果希望在系统中某个类的对象只能存在一个,

单例模式是最好的解决方案。

其实单例类似C语言中的全局变量

在整个程序声明周期内,该对象只有一份存在内存中

可以在多个对象之间共享数据。

<1>单例创建

(1)  单例的创建方法通常以default/shared/standard 等等开头

(2) 单例不需要release 或者 autorelease ,因为单例的生命周期为整个程序。

2.方法:

2.1 NSFileManager

  1. <>创建文件管理器单例对象
  2.  
  3. [NSFileManager defaultManager]
  4.  
  5. <>遍历目录下的内容
  6.  
  7. //浅度遍历当前目录下的文件
  8.  
  9. /*
  10.  
  11. contentsOfDirectoryAtPath:要遍历的路径
  12.  
  13. error:错误信息
  14.  
  15. */
  16.  
  17. NSArray *array = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:path error:&error];
  18.  
  19. //深度遍历
  20.  
  21. array = [fileManger subpathsOfDirectoryAtPath:path error:nil];
  22.  
  23. <>判断文件是否存在
  24.  
  25. /*
  26.  
  27. 判断文件是否存在的时候一定要加后缀。
  28.  
  29. path中如果有后缀表示文件,不加后缀表示文件夹。
  30.  
  31. */
  32.  
  33. BOOL isExist = [fileManger fileExistsAtPath:path];
  34.  
  35. if (isExist)
  36.  
  37. {
  38.  
  39. NSLog(@"存在");
  40.  
  41. }
  42.  
  43. else
  44.  
  45. {
  46.  
  47. NSLog(@"不存在");
  48.  
  49. }
  50.  
  51. <>创建文件和目录
  52.  
  53. //创建文件
  54.  
  55. /*
  56.  
  57. createFileAtPath:要创建文件的路径
  58.  
  59. contents:文件内容(NSData类型)
  60.  
  61. attributes:文件属性,一般为nil,nil表示采用默认属性。
  62.  
  63. */
  64.  
  65. //注意:如果文件已经存在会覆盖
  66.  
  67. BOOL createOK = [fileManger createFileAtPath:path contents:nil attributes:nil];
  68.  
  69. //创建目录
  70.  
  71. /*
  72.  
  73. createDirectoryAtPath:要创建的目录,如果文件夹已经存在不会覆盖
  74.  
  75. withIntermediateDirectories:是否有中间目录
  76.  
  77. attributes:文件夹的属性,nil表示默认属性
  78.  
  79. error:错误信息
  80.  
  81. */
  82.  
  83. createOK = [fileManger createDirectoryAtPath:path withIntermediateDirectories:YES attributes:nil error:&error];
  84.  
  85. <>拷贝文件/目录
  86.  
  87. //目录与目录拷贝
  88.  
  89. [fileManger copyItemAtPath:fromFilePath toPath:toDirPath error:&error];
  90.  
  91. //文件与文件拷贝
  92.  
  93. [fileManger copyItemAtPath:fromFilePath toPath:toFilePath error:&error];
  94.  
  95. <>移动文件/目录
  96.  
  97. [fileManger moveItemAtPath:frompath toPath:toPath error:nil];
  98.  
  99. <>删除文件/目录
  100.  
  101. [fileManger removeItemAtPath:toPath error:nil];
  102.  
  103. <>获取文件属性
  104.  
  105. NSDictionary *attributes = [fileManger attributesOfItemAtPath:path error:nil];
  106.  
  107. NSLog(@"文件的属性:%@",attributes);

2.2 NSData(二进制数据)

<1>把NSString转换为NSData

NSData *data = [string dataUsingEncoding:

NSUTF8StringEncoding]

<2>把NSData转换为NSString

NSString *convertString = [[NSString alloc]

initWithData:data encoding:NSUTF8StringEncoding]

2.3 NSFileHandle(文件句柄类)

对文件进行读写首先需要NSFileHandle打开文件,

NSFileHandle对文件进行读写都是NSData类型的二进制数据.

  1. <>打开文件方法
  2.  
  3. //只读的句柄
  4.  
  5. NSFileHandle *readOnlyHandle = [NSFileHandle fileHandleForReadingAtPath:path];
  6.  
  7. //只写的句柄
  8.  
  9. NSFileHandle *writeOnlyHandle = [NSFileHandle fileHandleForWritingAtPath:path];
  10.  
  11. //读写句柄
  12.  
  13. NSFileHandle *readAndWriteHandle = [NSFileHandle fileHandleForUpdatingAtPath:path];
  14.  
  15. <>读指定长度的数据(单位为字节)
  16.  
  17.   //读取5个字节数据
  18.  
  19. NSData *data = [readOnlyHandle readDataOfLength:];
  20.  
  21. <>从当前偏移量读到文件尾
  22.  
  23. [readOnlyHandle readDataToEndOfFile]
  24.  
  25. [readAndWriteHandle readDataToEndOfFile]
  26.  
  27. <>设置文件偏移量(单位为字节)
  28.  
  29. [readOnlyHandle seekToFileOffset:偏移的字节数];
  30.  
  31. <>将文件偏移量定位到文件尾
  32.  
  33. [readOnlyHandle seekToEndOfFile];
  34.  
  35. <>写文件(不覆盖的时候需要设置偏移量)
  36.  
  37. //1.先把偏移量指到文件尾部
  38.  
  39. [readAndWriteHandle seekToEndOfFile];
  40.  
  41. //2.写入到指定路径
  42.  
  43. [readAndWriteHandle writeData:[@"abcdef" dataUsingEncoding:NSUTF8StringEncoding]];
  44.  
  45. <>关闭文件句柄
  46.  
  47. //关闭文件句柄,关闭后(不需要)就不能再操作文件了
  48.  
  49. [readAndWriteHandle closeFile];
  50.  
  51. [readOnlyHandle closeFile];
  52.  
  53. [writeOnlyHandle closeFile];

3  Plist

<1> 什么是plist文件, plist文件的作用

1.plist文件:property list  属性列表文件,文件的内容只能是 NSString,NSNumber,NSDate,NSData,NSArray,NSDictionary类的对象内容,不能保存其他类型数据

2.作用:对一些登陆注册信息或者程序的配置信息(小数据)进行持久化存储

<2> 如何创建plist文件, 如何编辑plist文件

Plist文件内容的格式是XML语法格式

1.Xcode创建

1.点击右键—>New File 弹出一对话框

2.iOS程序选中iOS栏中的Resource或者Mac程序选中OS X 栏中的resource

3.点击Resource中的Property List 创建plist文件

4.点击文件中的'+'可以添加数据

2.代码创建

如果要把 NSString NSNumber NSDate NSData NSArray NSDictionary 的对象写入文件一般就用plist文件

我们需要这些数据保存到一个数组或者字典中,然后调用数组和字典的相关函数把数 组NSArray或者字典NSDictionary写入plist文件

//NSArray和NSDictionary写文件方法

- (BOOL)writeToFile:(NSString *)path atomically:

(BOOL)useAuxiliaryFile;

<3> 如何在程序中读取plist文件数据

Plist文件的根节点(数据的最外层)通常是数组或者字典

如果Plist文件的根节点是字典那么使用字典的类方法

+ (id)dictionaryWithContentsOfFile:(NSString *)path;

读写Plist文件

如果根节点是数组那么使用数组的类方法

+ (id)arrayWithContentsOfFile:(NSString *)path;

读取Plist文件。

注:上述两个方法只能读取Plist文件,不能读取其他格式的文件。

iOS开发-文件操作的更多相关文章

  1. IOS 开发文件操作——NSFileManager

    转自:http://blog.csdn.net/xyz_lmn/article/details/8968213,留着方便查阅 iOS的沙盒机制,应用只能访问自己应用目录下的文件.iOS不像androi ...

  2. iOS:文件操作相关(18-03-23更)

    0.iOS文件系统 1.工程内文件 2.文件夹管理 3.文件操作 4.NSCache 附录: 1.沙盒文件夹.文件大小 2.清除沙盒 Library / Cache 下所有数据 3.测试plist 0 ...

  3. ios 关于文件操作 获取 文件大小

     分类: Apple IPhone2012-06-28 11:31 4664人阅读 评论(0) 收藏 举报 ios语言manager测试c c语言 实现 #include "sys/stat ...

  4. IOS开发 文件路径

    1.开发平台路径: /Developer/Platforms 此路径下一般有三个目录,分别是mac电脑.模拟器.iphone真机 MacOSX.platform iPhoneSimulator.pla ...

  5. iOS 的文件操作

    直接上操作 效果:将一张图片写入文件 (图片本身已经在Assets.xcassets里面了) 1.获取当前app的沙盒路径 NSString *documentPath = NSSearchPathF ...

  6. Python开发 文件操作

    阅读目录 1.读写文件 open()将会返回一个file对象,基本语法: open(filename,mode) filename:是一个包含了访问的文件名称的路径字符串 mode:决定了打开文件的模 ...

  7. Python开发——文件操作

    文件的读取 http://www.cnblogs.com/linhaifeng/articles/5984922.html

  8. iOS开发文件夹--Copy items if needed

    蓝色文件夹 蓝色文件夹(folder)一般作为资源文件夹使用,与黄色文件夹的主要区别是不参与编译,所以说如果你在这些文件夹下编写的逻辑代码是不参与编译的,其他文件也不能直接引用它们,若引用其中文件需要 ...

  9. iOS 关于文件操作 NSFileManager

    创建文件夹 + (BOOL)creatDir:(NSString *)path { if (path.length==0) { return NO; } NSFileManager *fileMana ...

随机推荐

  1. PLSQL-Developer数据库连接工具使用方法

    PLSQL-Developer数据库连接工具使用方法 该方法适用于本机未安装Oracle客户端的情况下如何让连接到数据库.经过本人亲自测试绝对可以连接.前提是您安装的版本没有问题,如您安装的版本有问题 ...

  2. Rails当你运行一个数据库回滚错误:ActiveRecord::IrreversibleMigration exception

    最近rails3.2在更改数据库表字段,然后要回滚取消,但在运行rake db:rollback命令,错误: rake aborted! An error has occurred, all late ...

  3. 探索Android该Parcel机制上

    一.先从Serialize说起 我们都知道JAVA中的Serialize机制.译成串行化.序列化……,其作用是能将数据对象存入字节流其中,在须要时又一次生成对象.主要应用是利用外部存储设备保存对象状态 ...

  4. JavaScipt中对DOM的理解

    一.理解DOM 浏览器通过文档对象模型DOM使JavaScript程序可以访问页面上的元素,而DOM是页面上XHTML中文档正文标题.段落.列表.样式ID.class以及所有其他出现的数据的一个内部表 ...

  5. .Net中批量更新或添加数据

    方法一:使用SqlBulkCopy实现批量更新或添加数据. SqlBulkCopy类一般只能用来将数据批量插入打数据库中,如果数据表中设置了主键,出现重复数据的话会报错,如果没有设置主键,那么将会添加 ...

  6. bitnami redmine安装、配置、备份、恢复(这篇文章靠谱)

    bitnami redmine安装.配置.备份.恢复 2012-12-17 12:33 2596人阅读 评论(0) 收藏 举报 1. 安装时语言选择英文,不可以选择中文,否则不能正常运行,可以在账户里 ...

  7. Mysql个人语句笔记

    --一些简单语句记录: /*mysql*/SHOW DATABASES CREATE DATABASE guoDROP DATABASE guo /*查看创建的数据库*/SHOW CREATE DAT ...

  8. 数据结构栈的java实现

    近来复习数据结构,自己动手实现了栈.栈是一种限制插入和删除只能在一个位置上的表.最基本的操作是进栈和出栈,因此,又被叫作“先进后出”表. 实现方式是这样的:首先定义了一个接口,然后通过这个接口实现了线 ...

  9. 构建日均千万PV Web站点1

    如何构建日均千万PV Web站点 (一) 其实大多数互联网网站起初的网站架构都是(Linux+Apache+MySQL+PHP). 不过随着时代的发展,科技的进步.互联网进入寻常百姓家的生活.所谓的用 ...

  10. java反射拼接方法名动态执行方法

    近期由于负责项目的一个模块,该模块下有很多分类,每个分类都有一个编码code,这个值是作为一个参数携带过来的.但是每个code确实对应一个方法的. code的值有很多个,自己又不想做ifelse或者s ...