文件管理代码NSFileManager
import Foundation
//NSFileManager:
//1.NSFileManager 专门负责文件/文件夹的管理操作,包括创建/删除/移动/拷贝等
//2.NSFileManager 是一个单例类
//3.NSFileManager中所有的功能是通过变量型方法提供的
//声明一个文件操作的路径
let path = "/Users/yuting/Desktop/授课/CD1604/语言阶段/day15-文件管理/文件"
//1.获取单例对象
let fileManager = NSFileManager.defaultManager()
//2.浅度遍历
//函数原型:public func contentsOfDirectoryAtPath(path: String) throws -> [String]
//参数:需要遍历的文件夹的路径
//功能:获取指定路径文件夹下所有的文件或者文件夹的相对路径(相对于指定文件夹来说)->获取指定文件夹下所有的文件或者文件夹的名字;不能获取当前目录下的子目录中的内容
//try? 如果后面有异常那么函数返回值就是nil;如果没有异常返回值就是函数的返回值类型的值
let centents = try? fileManager.contentsOfDirectoryAtPath(path)
if let centent2 = centents{
print("浅度遍历结果:\(centent2)")
}else{
print("有异常")
}
//3.深度遍历
//函数原型:public func subpathsOfDirectoryAtPath(path: String) throws -> [String]
//参数:需要遍历的文件夹的路径
//功能:获取指定路径文件夹下所有的文件或者文件夹的相对路径(相对于指定文件夹来说);能获取当前目录下所有的子目录的内容
let subContents = try? fileManager.subpathsOfDirectoryAtPath(path)
if subContents != nil{
print("深度遍历结果:\(subContents!)")
}else{
print("有异常")
}
//4.创建目录
//函数原型:public func createDirectoryAtPath(path: String, withIntermediateDirectories createIntermediates: Bool, attributes: [String : AnyObject]?) throws
//参数1:需要创建的目录的路径(注意:这个目录必须是需要创建好的文件夹的目录)
//参数2:是否创建中间目录(如果传入true,会自动创建目录中不存在的所有的中间目录)
//参数3:nil(创建的文件夹是默认属性)
do{
try fileManager.createDirectoryAtPath(path+"/123/ddd", withIntermediateDirectories: true, attributes: nil)
}catch{
//如果获取到do中调用的函数的异常,就会执行catch
print("创建目录异常")
}
//5.创建文件
//函数原型:public func createFileAtPath(path: String, contents data: NSData?, attributes attr: [String : AnyObject]?) -> Bool
//参数1:需要创建的文件的路径(路径中必须拼接创建好的文件的文字)
//参数2:需要在创建文件时给文件中写入的数据(如果是nil就不写数据到文件中)
//参数3:文件属性(传nil是默认属性)
//返回值:是否创建成功
//功能:在指定位置创建一个文件,并且写入指定的数据;如果文件已经存在,创建的时候会覆盖原来的文件
//txt用来存储的是文本,文本对应程序中的字符串。在这儿写入的数据应该是字符串的数据
//NSData二进制类型,在iOS或者Swift中所有和本地文件或者进行数据交流,必须以二进制的形式进行数据传递
let wirteStr = "撒即可得分后来开始的发生了饭店喝酒阿卡罚款是灵魂都发来撒快递费看是否可拉伸"
//将字符串转换成NSData
//参数:编码方式(NSUTF8StringEncoding是中文编码方式)
let data1 = wirteStr.dataUsingEncoding(NSUTF8StringEncoding)
let ret1 = fileManager.createFileAtPath(path+"/444.txt", contents: data1, attributes: nil)
if ret1{
print("文件创建成功")
}else{
print("文件创建失败")
}
//将图片文件/视频文件转换成二进制文件
//将本地文件转换成二进制
let imageData = NSData.init(contentsOfFile: "/Users/yuting/Desktop/mmm.png")
let ret2 = fileManager.createFileAtPath(path+"/n.png", contents: imageData, attributes: nil)
if ret2{
print("图片文件创建成功")
}else{
print("图片文件创建失败")
}
//6.删除文件/目录
//函数原型:public func removeItemAtPath(path: String) throws
//参数:需要删除的文件/目录的地址
do{
try fileManager.removeItemAtPath(path+"/ddd")
}catch{
print("删除文件/目录异常")
}
//7.判断文件或者目录是否存在
//函数原型:public func fileExistsAtPath(path: String) -> Bool
//参数:需要判断的文件/目录的路径
//返回值:判断结果
let ret3 = fileManager.fileExistsAtPath(path)
if ret3 == true{
print("文件/目录存在")
}else{
print("文件/目录不存在")
}
//8.判断文件或者目录是否存在,同时判断是否是目录
//函数原型:public func fileExistsAtPath(path: String, isDirectory: UnsafeMutablePointer<ObjCBool>) -> Bool
//参数1:需要判断的文件/目录的路径
//参数2:存储是否是目录的结果(需要传入一个ObjCBool类型的指针,对应到swift中就是地址)
//返回值:是否存在的结果
var ret4: ObjCBool = ObjCBool(false)
let ret5 = fileManager.fileExistsAtPath(path+"/333.txt", isDirectory: &ret4)
//判断是否存在
if ret5{
print("文件/目录存在")
//判断是否是目录
if ret4{
print("是目录")
}else{
print("不是目录")
}
}else{
print("文件/目录不存在")
}
//9.获取文件/目录的属性
//函数原型:public func attributesOfItemAtPath(path: String) throws -> [String : AnyObject]
//参数:要获取属性的文件/目录的路径
let attributes = try? fileManager.attributesOfItemAtPath(path+"/333.txt")
if attributes != nil{
print("属性:\(attributes!)")
print(attributes!["NSFileCreationDate"]!)
}else{
print("获取属性异常")
}
//10.文件/目录的拷贝
//函数原型:public func copyItemAtPath(srcPath: String, toPath dstPath: String) throws
//参数1:源文件/目录路径
//参数2:目的路径(需要拼接拷贝成功后的文件名/目录名)
do{
try fileManager.copyItemAtPath(path+"/123", toPath: path+"/bbb/123")
}catch{
print("拷贝异常")
}
//11.文件/目录的移动
//函数原型:public func moveItemAtPath(srcPath: String, toPath dstPath: String) throws
//参数1:需要被移动的文件/目录的路径
//参数2:目的路径(需要拼接移动成功后的文件名/目录名)
do{
try fileManager.moveItemAtPath(path+"/n.png", toPath: path+"/bbb/n.png")
}catch{
print("移动异常")
}
NSFileHandle
//NSFileHandle:
//文件代言人。将文件和NSFileHandle对象关联在一起后,对NSFileHandle对象进行的操作相当于对文件本身进行操作
let path = "/Users/yuting/Desktop/授课/CD1604/语言阶段/day15-文件管理/文件/333.txt"
//1.NSFileHandle对象的创建
//a.以读的形式打开一个文件来创建这个文件对应的NSFileHandle对象;那么只能通过这个NSFileHandle对象对文件进行读操作
//参数:与NSFileHandle对象关联的文件路径
let handleO = NSFileHandle.init(forReadingAtPath: path)
var handle: NSFileHandle = NSFileHandle()
if let thandle = handleO{
handle = thandle
}else{
print("关联失败")
}
//3.读取指定长度的文件内容
//函数原型:public func readDataOfLength(length: Int) -> NSData
//参数:长度(单位: bytes)
let data2 = handle.readDataOfLength(200)
//将NSData转换成字符串
let str2 = String.init(data: data2, encoding: NSUTF8StringEncoding)
print("指定长度\n:\(str2!)")
//2.读取到文件尾
//函数原型:public func readDataToEndOfFile() -> NSData
handle.seekToFileOffset(0) //读之前将读写进度定位到文件开始的位置
let data1 = handle.readDataToEndOfFile()
//将NSData转换成字符串
let str1 = String.init(data: data1, encoding: NSUTF8StringEncoding)
print("读取到文件末尾:\n\(str1!)")
//总结:使用同一个文件句柄对象去进行多次读取文件操作,每次读取都是从上次读取到的位置接着往后读取
//4.定位读写进度
//将读写进度定位到文件的最后
handle.seekToEndOfFile()
//将读写进度定位到指定位置
//参数:距离文件开始位置的偏移大小
handle.seekToFileOffset(0)
//b.以写的形式去创建文件句柄(只能通过文件句柄对象进行写操作)
let handleW = NSFileHandle.init(forWritingAtPath: path)
var handle2 = NSFileHandle()
if let thandel = handleW{
handle2 = thandel
}else{
print("写关联失败")
}
//1.将数据写入文件中
//函数原型:public func writeData(data: NSData)
//参数:需要写入文件中的数据
//功能:第一次写的时候是从文件的开始位置写,会覆盖原文件的原来位置上的数据;多次进行写操作的时候,每次都是在上次写入结束的位置接着往写
//如果想要从文件的末尾开始写数据,只需要在写之前将读写进度定位到文件尾
handle2.seekToEndOfFile()
let str3 = "bbbbbbbb"
let data3 = str3.dataUsingEncoding(NSUTF8StringEncoding)
handle2.writeData(data3!)
let str4 = "ccccccc"
let data4 = str4.dataUsingEncoding(NSUTF8StringEncoding)
handle2.writeData(data4!)
//2.清除文件内容
//参数:清除文件后剩余的内容的字节数(留的是文件开始的内容)
handle2.truncateFileAtOffset(0)
网友评论