#
转:叫我干苦力的码农
前言:作为一个iOS开发人员,我们都了解沙盒机制,每个应用程序都有自己独立的储存空间(大名就是”沙盒”),沙盒是:应用程序只能对自己创建的文件系统读取文件,这个独立、封闭、安全的空间,它一般存放着程序包含的文件(即可执行文件)/图片/音频/视频/plish文件/sqlite数据库及其他文件.
然后让我们看一下沙盒的位置及目录文件
. 根目录获取方式
1 | let home = NSHomeDirectory() as NSString; |
然后把通过文件查找(如图1所示:),我们就会发现根目录下面的文件夹,具体文件夹如下所述:
. 根目录下面的文件夹分别是Document / Library / temp
1). Document:一般需要持久的数据都放在此目录中,可以在当中添加子文件夹,iTunes备份和恢复的时候,会包括此目录:
Document获取方式
1 | let DocumentPath = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory,NSSearchPathDomainMask.AllDomainsMask, true) |
2). temp:创建临时文件的目录,当iOS设备重启时,文件会被自动清除:
tempPath获取方式
1 | let tempPath = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.CachesDirectory,NSSearchPathDomainMask.AllDomainsMask, true) |
3). Library:设置程序的默认设置和其他状态信息:
Library获取方式
1 | let libraryPath = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.LibraryDirectory,NSSearchPathDomainMask.AllDomainsMask, true) |
通过上面部分我们了解了沙盒的位置及根目录下面的一切东西,我们就来具体看看怎么对文件和文件夹的操作,操作它我们使用NSFileManager,NSFileHandle等类来实现, 具体操作我也总结以下几点
1. 创建文件夹
1).第一种方法:
1 | let myDire: String = NSHomeDirectory() + "/Documents/Rookie/Files" |
2).第二种方法:
1 | // NSSearchPathDirectory.DocumentDirectory 查找Documents文件夹 |
- 第二种方法我们创建的文件格式是file:// 开头的
2. 了解一个具体目录下的所有文件
1).对指定路径执行浅搜索,返回指定目录路径下的文件、子目录及符号链接的列表
1 | let contentsOfPath = try? manager.contentsOfDirectoryAtPath(url.path!) |
输出结果:
1 | contentsOfPath: Optional([".DS_Store", "arr.plist", "Rookie", "RookieSon", "RookieString.png", "RookieString.txt", "String.png", "test.txt"]) |
2).类似上面的,对指定路径执行浅搜索,返回指定目录路径下的文件、子目录及符号链接的列表
1 | let contentsOfURL = try? manager.contentsOfDirectoryAtURL(url, includingPropertiesForKeys: nil, options: NSDirectoryEnumerationOptions.SkipsHiddenFiles) |
3).深度遍历,会递归遍历子文件夹(但不会递归符号链接)
1 | let enumeratorAtPath = manager.enumeratorAtPath(url.path!) |
4).类似上面的,深度遍历,会递归遍历子文件夹(但不会递归符号链接)
1 | let enumeratorAtURL = manager.enumeratorAtURL(url, includingPropertiesForKeys: nil, options: NSDirectoryEnumerationOptions.SkipsHiddenFiles, errorHandler:nil) |
5).深度遍历,会递归遍历子文件夹(包括符号链接,所以要求性能的话用enumeratorAtPath
1 | let subPaths = manager.subpathsAtPath(url.path!) |
3. 判断文件或者我们的文件夹是否存在
使用: public func fileExistsAtPath(path: String) -> Bool
1 | let isFileManager = NSFileManager.defaultManager() |
4. 将对象写入指定文件中
使用:public func writeToFile(path: String, atomically useAuxiliaryFile: Bool, encoding enc: NSStringEncoding) throws
public func writeToFile(path: String, atomically useAuxiliaryFile: Bool) -> Bool
1 | 1).将String保存到文件夹中 |
5. 创建文件
使用:
1 | public func URLsForDirectory(directory: NSSearchPathDirectory, inDomains domainMask: NSSearchPathDomainMask) -> [NSURL] |
6. 对文件进行复制
1).第一种方法:
1 | let copyManager = NSFileManager.defaultManager() |
1 | 2).定位到用户文档目录: |
1 | let copyManager2 = NSFileManager.defaultManager() |
7. 移动文件夹
1).第一种方法:
1 | let moveManager = NSFileManager.defaultManager() |
1 | 2).定位到用户文档目录: |
1 | let moveManager2 = NSFileManager.defaultManager() |
8. 删除文件
1).第一种方法:
1 | let DelectManager = NSFileManager.defaultManager() |
1 | 2).定位到用户文档目录: |
1 | let Delectmanager = NSFileManager.defaultManager() |
9. 删除目录下所有的文件
1 | // 方法1:获取所有文件,然后遍历删除 |
10. 读取我们所建的文
1 | let manager = NSFileManager.defaultManager() |
11. 在任意位置写入数据
1 | let manager = NSFileManager.defaultManager() |
12. 文件权限判断
1 | let manager = NSFileManager.defaultManager() |
13. 获取文件属性(创建时间,修改时间,文件大小,文件类型等信息)
1 | let manager = NSFileManager.defaultManager() |
14. 文件/文件夹比较
1 | let manager = NSFileManager.defaultManager() |