文件 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()获取应用程序包。
七、对象归档
将对象以某种格式保存到指定文件中,方便以后将对象从文件中恢复出来。