文件 I/O 基本操作

  无论多么简单的应用程序都要涉及到状态的存储,这里主要罗列下iOS一些比较主要的IO操作。iOS的主要IO操作包括以下几种:NSData、NSMutableData控制文件缓冲流;NSFileManager管理文件及文件的目录,包括文件及文件夹的创建、移动、删除、复制等;NSFileHandle读取、修改文件的内容(不可以创建);NSURL读取网络资源;NSBundle读取项目内部的资源;NSProcessInfo读取进程的信息,同时还包括比较高级的知识点:对象归档。

 

一、NSData、NSMutableData,数据缓冲流。

  NSData主要有两个功能:1.读取数据转成NSData缓冲流。2.将NSData缓冲流输出。

  NSData的创建:

    public init(bytes: UnsafePointer<Void>, length: Int)
    public init(bytesNoCopy bytes: UnsafeMutablePointer<Void>, length: Int)
    public init(bytesNoCopy bytes: UnsafeMutablePointer<Void>, length: Int, freeWhenDone b: Bool)
    @available(iOS 7.0, *)
    public init(bytesNoCopy bytes: UnsafeMutablePointer<Void>, length: Int, deallocator: ((UnsafeMutablePointer<Void>, Int) -> Void)?)
    public init(contentsOfFile path: String, options readOptionsMask: NSDataReadingOptions) throws
    public init(contentsOfURL url: NSURL, options readOptionsMask: NSDataReadingOptions) throws
    public init?(contentsOfFile path: String)
    public init?(contentsOfURL url: NSURL)
    public init(data: NSData)

  NSData有两个属性,length和byte。

  NSData的常用操作:

    //获取NSData所包含的数据 
    public func getBytes(buffer: UnsafeMutablePointer<Void>)
     //获取NSData指定长度的数据
    public func getBytes(buffer: UnsafeMutablePointer<Void>, length: Int)
    //获取NSData指定范围的数据
    public func getBytes(buffer: UnsafeMutablePointer<Void>, range: NSRange)

    //获取NSData指定范围的数据所组成的NSData数据
    public func subdataWithRange(range: NSRange) -> NSData

    //将NSData数据写入文件
    public func writeToFile(path: String, atomically useAuxiliaryFile: Bool) -> Bool
    //将NSData数据写入网络文件
    public func writeToURL(url: NSURL, atomically: Bool) -> Bool

  

二、NSFileManager,管理文件及文件夹

  开发者可以通过NSFileManager对文件和文件夹进行创建、移动、删除和复制,在对文件和文件夹进行通用操作时可以通过实现代理(NSFileManagerDelegate)来确保文件操作的成功执行,并在成功执行后实现特定的操作。

  NSFileManager以文件名多唯一标识,文件名可以是绝对路径或相对路径,不以斜线/开头的是相对路径,以斜线/开头的是绝对路径,~表示当前用户的Home目录,. 表示当前目录,..表示上级目录。

  常用操作:

    //判断该路径的文件是否存在
    public func fileExistsAtPath(path: String) -> Bool
    //判断该路径的文件或目录是否存在,isDirectory用于传入是否是目录
    public func fileExistsAtPath(path: String, isDirectory: UnsafeMutablePointer<ObjCBool>) -> Bool
    //判断该路径的文件是否可读
    public func isReadableFileAtPath(path: String) -> Bool
    //判断该路径的文件是否可写
    public func isWritableFileAtPath(path: String) -> Bool
    //判断该路径的文件是否可执行
    public func isExecutableFileAtPath(path: String) -> Bool
    //判断该路径的文件是否删除
    public func isDeletableFileAtPath(path: String) -> Bool
    //获取文件的内容
    public func contentsAtPath(path: String) -> NSData?

    //创建文件
    public func createFileAtPath(path: String, contents data: NSData?, attributes attr: [String : AnyObject]?) -> Bool
    //根据路径创建目录
    public func createDirectoryAtPath(path: String, withIntermediateDirectories createIntermediates: Bool, attributes: [String : AnyObject]?) throws
    //根据URL创建目录
    public func createDirectoryAtURL(url: NSURL, withIntermediateDirectories createIntermediates: Bool, attributes: [String : AnyObject]?) throws
    //根据路径删除文件或目录
    public func removeItemAtPath(path: String) throws
    //根据URL删除文件或目录
    public func removeItemAtURL(URL: NSURL) throws
    //根据路径删除文件或目录
    public func copyItemAtPath(srcPath: String, toPath dstPath: String) throws
    //根据URL复制文件或目录
    public func copyItemAtURL(srcURL: NSURL, toURL dstURL: NSURL) throws
    //根据路径移动文件或目录
    public func moveItemAtPath(srcPath: String, toPath dstPath: String) throws
    //根据URL移动文件或目录
    public func moveItemAtURL(srcURL: NSURL, toURL dstURL: NSURL) throws

  

三、NSProcessInfo,获取应用程序进程信息

  通过NSProcessInfo可以获取app在运行过程中的进程信息。通过调用NSProcessInfo的类方法

processInfo()获得NSProcessInfo实例。

 

  主要属性:

    //运行时所有环境的变量名和值
    public var environment: [String : String] { get }
    //运行时所传入的参数组成的数组
    public var arguments: [String] { get }
    //运行的系统的主机名
    public var hostName: String { get }
    //进程名
    public var processName: String
    //进程Id
    public var processIdentifier: Int32 { get }
    //返回一个全局的、唯一的字符串
    public var globallyUniqueString: String { get }
    //操作系统版本号
    public var operatingSystemVersionString: String { get }
    //操作系统版本
    public var operatingSystemVersion: NSOperatingSystemVersion { get }
    //处理器数量
    public var processorCount: Int { get }
    //激活的处理器数量
    public var activeProcessorCount: Int { get }
    //物理内存
    public var physicalMemory: UInt64 { get }
    //系统运行的时间
    public var systemUptime: NSTimeInterval { get }

  

四、NSFileHandle,文件IO的处理

  通过NSFileHandle处理文件主要有下面三个步骤:

  1.创建一个NSFileHandle对象,该对象打开对应的文件。

  2.对打开的文件进行IO操作。

  3.关闭文件。

    //根据路径打开可读文件
    public convenience init?(forReadingAtPath path: String)
    //根据路径打开可写文件
    public convenience init?(forWritingAtPath path: String)
    //根据路径打开可读、可写文件
    public convenience init?(forUpdatingAtPath path: String)
    //根据URL打开可读文件
    public convenience init(forReadingFromURL url: NSURL) throws
    //根据URL打开可写文件
    public convenience init(forWritingToURL url: NSURL) throws
    //根据URL打开可读、可写文件
    public convenience init(forUpdatingURL url: NSURL) throws

  

    //读取文件中的所有数据
    public func readDataToEndOfFile() -> NSData
    //读取文件中length字节的数据
    public func readDataOfLength(length: Int) -> NSData
    //将data数据写入到该文件
    public func writeData(data: NSData)
    //文件指针跳到文件末尾
    public func seekToEndOfFile() -> UInt64
    //将文件的指针跳到指定位置
    public func seekToFileOffset(offset: UInt64)
    //将文件截断为长度为offset的文件
    public func truncateFileAtOffset(offset: UInt64)
    //关闭文件
    public func closeFile()

 

五、NSURL,读取网络资源

  NSURL作为网络资源的唯一定位。

六、NSBundle,管理项目内部资源

  NSBundle对象调用mainBundlle()获取应用程序包。

七、对象归档

  将对象以某种格式保存到指定文件中,方便以后将对象从文件中恢复出来。

 

posted @ 2016-08-28 22:46  PerTerbin  阅读(282)  评论(0编辑  收藏  举报