1简介
(1)文件用于对数据进行持久性存储(单例模式)
(2)两个类: NSFileManager文件管理类
NSFileHandle文件句柄类(见下一节)
(3)NSFileManager的作用是对文件自身进行管理(创建、移动、删除、拷贝)
2用法
(1):创建文件管理类对象(单例设计模式)
let manager = NSFileManager.defaultManager()
(2)判断文件/目录是否存在:
fileExistsAtPath(<#T##path: String##String#>)
(3)判断文件/目录是否存在,同时判断是否是目录:
isDirectory判断是否是目录
fileExistsAtPath(<#T##path: String##String#>, isDirectory: <#T##UnsafeMutablePointer#>
(4)浅度遍历: 只返回本路径下的所有文件和文件夹
let path = "/Users/Lwy/Desktop/"
let direcPath = path + "第三方库"
//fileExistsAtPath判断文件是否存在
if manager.fileExistsAtPath(direcPath) {
let array = try! manager.contentsOfDirectoryAtPath(direcPath)
print(array)
}
else {
print("该路径下不存在这个文件")
}
//注意:.DS_Store为NSFileManager系统提供的
(5)深度遍历:能遍历本路径下所有的目录和文件已经所有的目录的子目录和子目录文件
if manager.fileExistsAtPath(direcPath) {
let array = try! manager.subpathsOfDirectoryAtPath(direcPath)
print(array)
}
else {
print("该文件不存在")
}
(6)创建文件:
manager.createFileAtPath(<#T##path: String##String#>, contents: <#T##NSData?#>, attributes: <#T##[String : AnyObject]?#>)
1:返回值BOOL返回文件是否创建成功,不成功返回false,成功返回true
2:path需要创建的文件路径;contents文件内容;attributes:设置创建的文件的类型,如果为nil就会创建一个默认类型
3:文件不存在的时候新建一个文件。如果文件已经存在,替换原来的文件
4:NSData 是二进制数据
可以把很多类型的数据都可以转换成二进制数据 如:文字、图片、视频、音频 (数据本地化实质,就是将数据转化成NSData,然后存到文件中)
let createFilePath = path + "我是新文件.txt"
if manager.fileExistsAtPath(createFilePath) {
print("该路径下已经存在同名文件 文件创建失败")
}
else {
//NSData文件的单位 二进制
let string = "枯藤老树昏鸦,小桥流水人家"
//【重点】将字符串转化成NSData
let data = string.dataUsingEncoding(NSUTF8StringEncoding)
let isSuccess = manager.createFileAtPath(createFilePath, contents: data!, attributes: nil)
print(isSuccess ? "文件创建成功" : "文件创建失败")
}
(7):创建文件夹(目录):
createDirectoryAtPath(<#T##path: String##String#>, withIntermediateDirectories: <#T##Bool#>, attributes: <#T##[String : AnyObject]?#>)
第二个参数:(注意,参数使用错误程序可能会崩溃)
是否创建中间目录.如果设置成true就可以去创建我们需要的中间目录,如果是false不会创建中间目录。其余参数见上
let directoryPath = path + "movies/科幻/食人鱼"
if manager.fileExistsAtPath(directoryPath) {
print("文件夹已存在创建失败")
}
else {
do {
try manager.createDirectoryAtPath(directoryPath, withIntermediateDirectories: true, attributes: nil)
print("文件夹创建成功")
}catch {
print("文件夹创建失败\(error)")
}
}
(8)文件的拷贝 (文件、文件夹的拷贝都是同一个方法)
manager.copyItemAtPath(<#T##srcPath: String##String#>, toPath: <#T##String#>)
1:第一个参数是原路径,第二个参数是拷贝后的路径(目的路径)
2:文件的拷贝、移动都是对文件重命名的过程 ,所以新路径必须是完整路径 (带有文件名称和后缀)
//文件/文本有后缀
let createFilePath = path + "我是新文件.txt"
let directoryPath = path + "movies/科幻/食人鱼/副本.txt"
do {
try manager.copyItemAtPath(createFilePath, toPath: directoryPath)
print("文件拷贝成功")
}catch {
print("文件拷贝失败\(error)")
}
//文件夹没有后缀
let path1 = path + "movies"
let path2 = path + "图片/新文件夹"
do {
try manager.copyItemAtPath(path1, toPath: path2)
print("文件夹拷贝成功")
}catch {
print("文件夹失败\(error)")
}
(9)文件移动(剪切) --- 文件、文件夹
moveItemAtPath(<#T##srcPath: String##String#>, toPath: <#T##String#>)
let movePath = path + "movies"
let moveToPath = path + "图片/表情包/未命名文件夹"
do {
try manager.moveItemAtPath(movePath, toPath: moveToPath)
print("文件(夹)移动成功")
}catch {
print("文件(夹)移动失败\(error)")
}
(10)获取一个文件/目录的属性
attributesOfItemAtPath(<#T##path: String##String#>)
var dict = try? manager.attributesOfItemAtPath(path)
print(dict)
(11)删除目录或文件:
removeItemAtPath(<#T##path: String##String#>)
do {
try manager.removeItemAtPath(moveToPath)
print("删除成功")
}catch {
print("删除失败\(error)")
}