文件管理基础

文件管理代码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)




最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,198评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,663评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,985评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,673评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,994评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,399评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,717评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,407评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,112评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,371评论 2 241
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,891评论 1 256
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,255评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,881评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,010评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,764评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,412评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,299评论 2 260

推荐阅读更多精彩内容

  • NSUserDefault: NSUserDefault : 是一个单例, 在整个程序中只有一个实例对象,它可以用...
    云之君兮鹏阅读 1,340评论 4 27
  • 一、iOS中的沙盒机制 iOS应用程序只能对自己创建的文件系统读取文件,这个独立、封闭、安全的空间,叫做沙盒。它一...
    1d5cb7cff98d阅读 1,668评论 0 0
  • iOS开发-文件管理(一) 一、iOS中的沙盒机制 iOS应用程序只能对自己创建的文件系统读取文件,这个独立、封闭...
    MacShare阅读 1,726评论 0 6
  • 文件系统作为被所有进程使用的基本资源之一,在macOS和iOS中主要用于处理数据文件、应用程序以及与操作系统自身相...
    pro648阅读 2,626评论 0 9
  • 一、iOS中的沙盒机制 iOS应用程序只能对自己创建的文件系统读取文件,这个独立、封闭、安全的空间,叫做沙盒。它一...
    tzhtodd阅读 1,239评论 0 2