Object-C基础(14)——文件

文件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的参数。

你可能感兴趣的:(文件,Object-C)