iOS开发-文件操作
目录操作和文件管理
学习目标
1.理解单例
2.掌握NSFileManager类常用的文件管理操
3.掌握NSFileHandle类常用的文件数据操作
4.了解NSData类的常用操作
5.掌握Plist文件读写
——————————————————————
通常程序在运行中或者程序结束之后,需要保存一些信息,而且需要持久化存储信息,比如登陆信息、视频播放记录、收藏记录等等,那么我们可以采用以下几种方式对数据进行持久化保存.
1.1单例模式(当前对象有且仅有一个实例)
好处:只有一个实例,数据共享。
单例模式是一种常用的设计模式。在应用这个模式时,
单例对象的类必须保证只有一个实例存在,而且自行实例化并向整个
系统提供这个实例。如果希望在系统中某个类的对象只能存在一个,
单例模式是最好的解决方案。
其实单例类似C语言中的全局变量
在整个程序声明周期内,该对象只有一份存在内存中
可以在多个对象之间共享数据。
<1>单例创建
(1) 单例的创建方法通常以default/shared/standard 等等开头
(2) 单例不需要release 或者 autorelease ,因为单例的生命周期为整个程序。
2.方法:
2.1 NSFileManager
<>创建文件管理器单例对象
[NSFileManager defaultManager]
<>遍历目录下的内容
//浅度遍历当前目录下的文件
/*
contentsOfDirectoryAtPath:要遍历的路径
error:错误信息
*/
NSArray *array = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:path error:&error];
//深度遍历
array = [fileManger subpathsOfDirectoryAtPath:path error:nil];
<>判断文件是否存在
/*
判断文件是否存在的时候一定要加后缀。
path中如果有后缀表示文件,不加后缀表示文件夹。
*/
BOOL isExist = [fileManger fileExistsAtPath:path];
if (isExist)
{
NSLog(@"存在");
}
else
{
NSLog(@"不存在");
}
<>创建文件和目录
//创建文件
/*
createFileAtPath:要创建文件的路径
contents:文件内容(NSData类型)
attributes:文件属性,一般为nil,nil表示采用默认属性。
*/
//注意:如果文件已经存在会覆盖
BOOL createOK = [fileManger createFileAtPath:path contents:nil attributes:nil];
//创建目录
/*
createDirectoryAtPath:要创建的目录,如果文件夹已经存在不会覆盖
withIntermediateDirectories:是否有中间目录
attributes:文件夹的属性,nil表示默认属性
error:错误信息
*/
createOK = [fileManger createDirectoryAtPath:path withIntermediateDirectories:YES attributes:nil error:&error];
<>拷贝文件/目录
//目录与目录拷贝
[fileManger copyItemAtPath:fromFilePath toPath:toDirPath error:&error];
//文件与文件拷贝
[fileManger copyItemAtPath:fromFilePath toPath:toFilePath error:&error];
<>移动文件/目录
[fileManger moveItemAtPath:frompath toPath:toPath error:nil];
<>删除文件/目录
[fileManger removeItemAtPath:toPath error:nil];
<>获取文件属性
NSDictionary *attributes = [fileManger attributesOfItemAtPath:path error:nil];
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类型的二进制数据.
<>打开文件方法
//只读的句柄
NSFileHandle *readOnlyHandle = [NSFileHandle fileHandleForReadingAtPath:path];
//只写的句柄
NSFileHandle *writeOnlyHandle = [NSFileHandle fileHandleForWritingAtPath:path];
//读写句柄
NSFileHandle *readAndWriteHandle = [NSFileHandle fileHandleForUpdatingAtPath:path];
<>读指定长度的数据(单位为字节)
//读取5个字节数据
NSData *data = [readOnlyHandle readDataOfLength:];
<>从当前偏移量读到文件尾
[readOnlyHandle readDataToEndOfFile]
[readAndWriteHandle readDataToEndOfFile]
<>设置文件偏移量(单位为字节)
[readOnlyHandle seekToFileOffset:偏移的字节数];
<>将文件偏移量定位到文件尾
[readOnlyHandle seekToEndOfFile];
<>写文件(不覆盖的时候需要设置偏移量)
//1.先把偏移量指到文件尾部
[readAndWriteHandle seekToEndOfFile];
//2.写入到指定路径
[readAndWriteHandle writeData:[@"abcdef" dataUsingEncoding:NSUTF8StringEncoding]];
<>关闭文件句柄
//关闭文件句柄,关闭后(不需要)就不能再操作文件了
[readAndWriteHandle closeFile];
[readOnlyHandle closeFile];
[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开发-文件操作的更多相关文章
- IOS 开发文件操作——NSFileManager
转自:http://blog.csdn.net/xyz_lmn/article/details/8968213,留着方便查阅 iOS的沙盒机制,应用只能访问自己应用目录下的文件.iOS不像androi ...
- iOS:文件操作相关(18-03-23更)
0.iOS文件系统 1.工程内文件 2.文件夹管理 3.文件操作 4.NSCache 附录: 1.沙盒文件夹.文件大小 2.清除沙盒 Library / Cache 下所有数据 3.测试plist 0 ...
- ios 关于文件操作 获取 文件大小
分类: Apple IPhone2012-06-28 11:31 4664人阅读 评论(0) 收藏 举报 ios语言manager测试c c语言 实现 #include "sys/stat ...
- IOS开发 文件路径
1.开发平台路径: /Developer/Platforms 此路径下一般有三个目录,分别是mac电脑.模拟器.iphone真机 MacOSX.platform iPhoneSimulator.pla ...
- iOS 的文件操作
直接上操作 效果:将一张图片写入文件 (图片本身已经在Assets.xcassets里面了) 1.获取当前app的沙盒路径 NSString *documentPath = NSSearchPathF ...
- Python开发 文件操作
阅读目录 1.读写文件 open()将会返回一个file对象,基本语法: open(filename,mode) filename:是一个包含了访问的文件名称的路径字符串 mode:决定了打开文件的模 ...
- Python开发——文件操作
文件的读取 http://www.cnblogs.com/linhaifeng/articles/5984922.html
- iOS开发文件夹--Copy items if needed
蓝色文件夹 蓝色文件夹(folder)一般作为资源文件夹使用,与黄色文件夹的主要区别是不参与编译,所以说如果你在这些文件夹下编写的逻辑代码是不参与编译的,其他文件也不能直接引用它们,若引用其中文件需要 ...
- iOS 关于文件操作 NSFileManager
创建文件夹 + (BOOL)creatDir:(NSString *)path { if (path.length==0) { return NO; } NSFileManager *fileMana ...
随机推荐
- Keil中使用宏编译来定义DEBUG输出
使用宏编译来格式化调试信息,是一个不错的方法,即可以在需要的时候打印出信息,还可以格式化我们所需要的输出. #define DEBUG 1 #if (DEBUG == 1) #define DBG(A ...
- leetcode第38题--Combination Sum
题目: Given a set of candidate numbers (C) and a target number (T), find all unique combinations in C ...
- EnterpriseLibrary 6.0(微软企业库6.0学习笔记) 之Data Access Block 配置和获取链接字符串
EnterpriseLibrary 的特点是快速开发,融合了微软工程师多年的经验,现在在微软内部有专门的一个小组在完善EnterpriseLibray,最近的更新时间是April 2013. 相关链接 ...
- PhotoShop基本工具 -- 移动工具
艺术或学习的东西吧, 爱好 比学编程还难 PS版本号 : PhotoShop CS6 1. 移动工具 (1) 工具栏和属性栏 工具栏 和 属性栏 : 左側的是工具栏, 每选中一个工具, 在菜单条的 ...
- mysql基础之基本数据类型
原文:mysql基础之基本数据类型 列类型学习 mysql三大列类型 整型 Tinyint/ smallint/ mediumint/int/ bigint(M) unsigned zerofill ...
- 转: js快速分享代码
这是一款简单易用的文章分享工具,您只需将下面的html代码拷贝到模板中就可以实现文章快速分享功能.如果您想分享你的博客.个人网站或者企业网站等等,下面是两款不错的分享工具,值得拥有! 1. [html ...
- 在winform中怎样实现好看的treeview样式
这是在网上截取的一张图,就是想做成这样的效果,不能用devExperss控件,主要是不知道他的那个“组织机构列表“用的是不是panel,怎样弄的样式
- Visual Studio 20**自动添加头部注释信息
关于Visual Studio 20**自动添加头部注释信息 作为一个万年潜水党,不关这一篇文章技术含量如何,也算是一个好的开始吧. 在日常的开发中我们经常需要为类库添加注释和版权等信息,这样 ...
- iOS基础 - 静态库
一.什么是库? 库是共享程序代码的方式,一般分为静态库和动态库. 二.静态库与动态库的区别? 静态库:链接时完整地拷贝至可执行文件中,被多次使用就有多份冗余拷贝. 动态库:链接时不复制,程序运行时由系 ...
- c# in deep 之对Linq表达式范围变量限制问题的一些解决办法
linq表达式的标准形式为from...where...select,其中from后面跟的就是范围变量.linq中范围变量需要是泛型的集合,假如我们想对ArrayList或Object[]进行处理,l ...