Swift\本地文件管理
2016-05-26 15:32
323 查看
转载自:http://www.coloroud.com/2015/06/01/Swift-File-Manager/
开头
看来Swift这趟浑水是非干不可,既然如此,那索性就来的彻底吧,来一次全方位,深入的学习之旅。进入正题,在Swift开发中,几乎是每一个App都需要在本地存储一些本地的持久化数据,毕竟不可能每次App使用都从网上现传数据回来使用吧,那样App的体验将会大打折扣。
ios存储特性
在ios体系中,每个app都是独立的,遵循沙盒机制,app之间数据相互隔离,换个更通俗易懂的说法,你可以把每个App看成是一个用户,就像在Linux系统中,每个用户有一个独立的home目录,该用户只对他的用户目录具有各项操作权。一般来所,程序之间是不可以相互访问的。目录结构
Apple自ios8以后,app目录结构发生了一些变化,ios8以前按App的Bundle(程序包)和app其他目录放在一起,ios8以后,Bundle被独立起来,和其他的Bundle放在一起,app目录文件相关的数据文件放在一起。file://~/Library/Developer/CoreSimulator/Devices/模拟器编号/data/Containers/Bundle/Application/app目录对应的目录编号 file://~/Library/Developer/CoreSimulator/Devices/模拟器编号/data/Containers/Data/Application/app目录对应的目录编号 //注:上面‘~/‘指的是你的用户主目录,比如我的是:/Users/anoxia,而Library/Developer/CoreSimulator/是模拟器地址。
当我创建完App,会在沙盒中创建三个文件夹:Document,Library,tmp。
Document:用来存放一些应用持久化数据,可以进行一下文件或文件夹的创建,移动和删除等操作。iTunes备份和恢复时,会包含此目录。
Library:应用一些设置信息及其他状态信息存放于此。
tmp:临时文件存放的目录,当ios重启时,会清空里面的数据。
获取各目录路径
Bundle目录相关操作:
获取应用Bundel包路径:varbundlePath=NSBundle.mainBundle().bundlePath//包路径 println(bunlePath)
获取Bundel资源路径:
varresourcePath=NSBundle.mainBundle().resourcePath//资源路径 println(resourcePath)
获取应用可执行文件路径
varexecutablePath=NSBundle.mainBundle().executablePath//App可执行文件路径 println(executablePath)
在Bundel路径中搜索文件
varinfoPlistPath=NSBundle.mainBundle().URLForResource("Info",withExtension:"plist") println(infoPlistPath)
获取应用根目录:
varhomePath=NSHomeDirectory() println(homePath)
获取Document目录:
vardocumentPath=NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory,NSSearchPathDomainMask.UserDomainMask,true) println(documentPath.last)
获取Library目录
varlibraryPath=NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.LibraryDirectory,NSSearchPathDomainMask.UserDomainMask,true) println(libraryPath.last)
获取Library下Caches
varcachePath=NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.CachesDirectory,NSSearchPathDomainMask.UserDomainMask,true) println(cachePath.last)
获取tmp
vartmpPath=NSTemporaryDirectory() println(tmpPath)
NSData
NSString与NSData互转
NSString转NSDatavarconversionString="isastring" conversionString.dataUsingEncoding(NSUTF8StringEncoding,allowLossyConversion:true) println(converedData) //输出:NSData(Optional):Optional(<6973206120737472696e67>)
NSData转NSString
varconverbackString=NSString(data:converedData!,encoding:NSUTF8StringEncoding) println(converbackString) //输出:NSString(Optional):Optional(isastring)
UIImage转NSData
letimage=documentDir+"/bg.jpg" letimageData:NSData=UIImageJPEGRepresentation(UIImage(named:image),0.1)
从沙盒加载NSData类型的UIImage
//加载NSData letimagetest=fileManager.contentsAtPath(imagePath) println(imagetest) //显示 letimageView=UIImageView(frame:view.bounds) imageView.image=UIImage(named:imagePath) view.addSubview(imageView)
NSFileManager文件管理
varfileManager=NSFileManager.defaultManager()
创建
文件夹vardocuments=NSHomeDirectory()+"/Documents" vardirPath=documents+"/a/b/c" fileManager.createDirectoryAtPath(dirPath,withIntermediateDirectories:true,attributes:nil,error:nil) //注:withIntermediateDirectories表示当创建的目录完整路径不满足时,是否递归创建完整路径
文件
//存储一个普通的文本文件 letstringContent="Contnetsoftest" //将文本内容转换成NSData内容 letstringNSData=stringContent.dataUsingEncoding(NSUTF8StringEncoding,allowLossyConversion:true) //保存文本 fileManager.createFileAtPath(textPath,contents:stringNSData,attributes:nil)
读取
递归遍历指定目录下所有内容varrecursivelyResult=fileManager.subpathsOfDirectoryAtPath(documents,error:nil) println(recursivelyResult)
遍历指定目录下内容
varcontentResult=fileManager.contentsOfDirectoryAtPath(documents,error:nil) println(contentResult)
判断一个文件或者文件夹是否存在
varaDir=documents+"/a" varexsit=fileManager.fileExistsAtPath(aDir) println(exsit)
获取一个文件或目录的属性
varattributes=fileManager.attributesOfItemAtPath(aDir,error:nil) println(attributes)
设置文件或目录属性
Bool:fileManager.setAttributes(<#attributes:[NSObject:AnyObject]#>,ofItemAtPath:<#String#>,error:<#NSErrorPointer#>)
读取文件内容
letcontent=fileManager.contentsAtPath(textPath) println(content)
移动(重命名)文件夹/文件
letnewPath=documentDir+"/new.jpg" fileManager.moveItemAtPath(imagePath,toPath:newPath,error:nil)
删除文件或文件夹
fileManager.removeItemAtPath(<#path:String#>,error:<#NSErrorPointer#>)
比较两个文件内容是否相同
letresult=fileManager.contentsEqualAtPath(image,andPath:imagePath)
读权限
Bool:fileManager.isReadableFileAtPath(<#path:String#>)
写权限
Bool:fileManager.isWritableFileAtPath(<#path:String#>)
NSString类路径处理方法(工具方法)
NSString:pathWithComponens:components //根据components中的元素构造有效路径 NSArray:pathComponents //析构路径,获得组成此路径的各个部分 NSString:lastPathComponent //提取路径的最后一个组成部分 NSString:pathExtension //从路径的最后一个组成部分中提取其扩展名 NSString:stringByAppendingPathComponent:path //将path添加到现有路径的末尾 NSString:stringByAppendingPathExtension:ext //将指定的扩展名添加到路径的最后一个组成部分 NSString:stringByDeletingLastPathComponent //删除路径的最后一个组成部分 NSString:stringByDeletingPathExtension //从文件的最后一部分删除扩展名 NSString:stringByExpandingTileInPath //将路径中代字符扩展成用户主目录(~)或指定用户的主目录(~user) NSString:stringByresolvingSymlinksInPath //尝试解析路径中的符号链接 NSString:stringByStandardizingPath //通过尝试解析~、..(父目录符号)、.(当前目录符号)和符号链接来标准化路径
示例:
首先预定义一个文件路径:
varfilePath:NSString="/Uesrs/anoxia/Mylove.mp3"
获取组成路径的各个部分:
println(filePath.pathComponents) //输出NSArray:[/,Uesrs,anoxia,Mylove.mp3]
活路路径的最后一个组成部分:
println(filePath.lastPathComponent) //输出:NSString:Mylove.mp3
删除路径额的最后一个组成部分:
println(filePath.stringByDeletingLastPathComponent) //输出:NSString:/Uesrs/anoxia
在路径最后添加路径:
varappendPath="file.txt" println(filePath.stringByAppendingPathComponent(anotherPath)) //输出:NSString:/Uesrs/anoxia/Mylove.mp3/text.a
获取文件路径的扩展:
println(filePath.pathExtension) //输出:NSString:mp3
在路径最后面追加扩展名:
println(filePath.stringByAppendingPathExtension("a")) //输出:NSString(Optional):Optional("/Uesrs/anoxia/Mylove.mp3.a")
遍历应用目录
letfilemanager:NSFileManager=NSFileManager() letfiles=filemanager.enumeratorAtPath(NSHomeDirectory()) whileletfile:AnyObject=files?.nextObject(){ println(file) }
相关文章推荐
- 证书过期:The certificate used to sign "###"...
- 11.swift 单例
- Swift资源包---OC和swift混合开发
- Swift 遍历数组元素
- Swift资源包--Sort方法
- swift基础笔记7-继承
- Swift语言操作KeyChain
- swift 开发库
- 10个惊艳的Swift单行代码
- Swift资源库--Map方法
- 详解swift和OC以及C语言的混编(不看后悔!)
- swift版QQ音乐播放器(二)
- Swift UIView层 动画
- Swift学习笔记(三)——OC与swift的相互调用
- Swift版本的Framework中,使用OC桥接报错
- Swift专题讲解十八——异常处理
- Swift构造器链
- swift uitableview 多选
- Swift-数组
- 总结一下使用Swift遇到的几个小问题和几个小知识点