文件IO(读数据、写数据)
NSString、NSArray、NSDictionary这些类自带IO功能。
文件IO,此处的文件IO既适用于Cocoa App的文件IO,也适用于CocoaTouch App(iOS APP)的文件IO。
对于应用程序而言:
1. 数量比较小,内容不太多,可以使用简单的文件进行保存。
2. 数据量较大,而且具有一定的结构关系,可以选择本地数据库进行保存。
3. 如果数据量更大,但没有系统级应用的支撑,可以采用云端数据保存。
如果数据量更大,有系统级应用的支撑,通常数据会保存在服务端,APP只是网络客户端。
即便是第三种情况,往往客户端也有少量的数据需要保存。
NSData与NSMutableData
它代表了内存中多个字节数据。可以理解为内存中的数据缓存。体现为2个功能:
- 把物理存储设备上的数据读入内存中NSData中。 读数据。
- 把NSData中数据写入物理存储设备。 写数据。
读取数据
- 通过创建NSData即可把数据读入到NSData中。
得到NSData之后,可以调用如下方法访问NSData所包含的字节数据:
- void *bytes:返回字节数据指针。指向NSData所包含的N个字节内容。
- (void)getBytes:(void *)buffer
- (void)getBytes:(void *)buffer
length:(NSUInteger)length
- (void)getBytes:(void *)buffer
range:(NSRange)range
-(void)enumerateByteRangesUsingBlock:(void (^)(const void *bytes,
NSRangebyteRange,
BOOL*stop))block:一个使用代码块的方法。该方法可以用于遍历字节数据。
写数据
- (BOOL)writeToFile:(NSString *)path
atomically:(BOOL)atomically : 将数据写入文件。
- (BOOL)writeToURL:(NSURL *)aURL
atomically:(BOOL)atomically : 将数据写入网络。
NSMutableData
额外多了一些可用于追加、替换数据的方法。
- (void)appendBytes:(const void*)bytes
length:(NSUInteger)length
- (void)appendData:(NSData *)otherData
NSFileManager:文件管理器
常识1:文件、文件夹,其实都只是文件分配表中一个项(item),因此对于程序而言,它们是统一的。
常识2:Unix、Linux、OS X系统上,有如下几个特殊的目录:
~:代表用户的home目录。
.:代表当前目录。pwd命令所看到的,就是当前目录。
..:代表上一级目录。
- 列出文件。
- 新建文件。
- 删除文件。
- 剪切->粘贴(move)、复制->粘贴(copy)
- 重命名文件。
- 创建符号或硬链接(快捷方式)
- 查看文件的各种属性
- 读取文件内容。
程序还可通过delegate来检测系统的文件改变。
代理
NSFileManager还可以制定一个delegate对象,当程序通过NSFileManager来新建、删除、复制、移动……操作文件项时,如果希望程序能做出响应的处理,就可通过delegate来实现。
NSPathUtilities.h管理路径
-NSPathUtilities.h对NSString进行了扩展,从而添加了如下方法:
这些方法,都只是用于操作文件路径的字符串,对文件路径、文件本身不会有任何影响——这些方法依然都只是字符串操作方法。
-还提供如下常用的工具函数:
NSUserName(): 得到用户名
NSHomeDirectory():得到当前用户的用户目录。
NSHomeDirectoryForUser():得到指定用户的用户目录。
NSHomeDirectoryForUser():得到临时目录。
NSProcessInfo:主要用于获取进程的相关信息
常识:何为进程? 当程序运行起来之后,就变成运行中的程序,这就是进程。
运行中的程序,就是进程。
NSProcessInfo可用于获取进程的如下几种信息:
- 运行参数、环境变量、进程标识符、进程名称等。
- 获取主机的相关信息。
- 获取主机相关的物理设备信息:处理器数量、物理内存等。
NSProcessInfo的方法通常只能用于获取,并不能用于修改。
该类的方法,主要用于获取运行程序所处的环境。
NSFileHandle: 处理文件内容
文件内容读、写等操作。
甚至可用于读取用户的键盘输入。
常识:电脑有3个标准的输入、输出设备:
- 标准输入设备(StandardInput):通常都是代表键盘。
- 标准输出设备(StandardOutput): 通常显示器。
- 标准错误输出(StandardError):通常也是显示器,只是错误信息通常会以红色字体显示。
- seekToFileOffset:移动读写文件的记录指针。
- offsetInFile:获取文件记录指针所在的位置。
使用NSFileHandle的步骤:
(1)针对要读写节点不同,采用不同的方法来创建NSFileHandle
(2)对打开的文件执行读、写。
(3)调用NSFileHandle的closeFile()关闭文件。
几个注意点:
1. fileHandleForReadingXXXXXX:这种方法打开的NSFileHandle都只能读文件。不能写。
2. fileHandleForWriteingXXXXXX:这种方法打开的NSFileHandle都只能写,不能读,并不会清空原来文件的内容。
如果尝试打开的文件不存在,程序不会自动创建,而是该方法会返回nil。
3. fileHandleForUpdatingXXXXXX:这种方法打开的NSFileHandle既能读,又能写。
如果尝试打开的文件不存在,程序不会自动创建,而是该方法会返回nil。
记住:不管是读、还是写,都会导致文件记录指针的移动。
NSURL:主要用于读取网络资源
实际上,也可以用于代表本地的磁盘上文件。
NSURL字符串通常应该满足如下格式:
协议://主机:端口/资源
scheme://host:port/resource|path
例如: http://www.crazyit.org:80/abc.html
对于NSURL而言,如果用于读取网络资源,使用ftp:、http:等类似的网络协议。
如果要读取本地磁盘文件使用:file:协议即可。
NSURL通常适用于作为其他方法的参数。比如NSString、比如NSArray、再比如NSDictionary等,都可接受NSURL的参数。