Swift\本地文件管理
转载自: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包路径:
var bundlePath = NSBundle.mainBundle().bundlePath // 包路径
println(bunlePath)
获取Bundel资源路径:
var resourcePath = NSBundle.mainBundle().resourcePath // 资源路径
println(resourcePath)
获取应用可执行文件路径
var executablePath = NSBundle.mainBundle().executablePath // App可执行文件路径
println(executablePath)
在Bundel路径中搜索文件
var infoPlistPath = NSBundle.mainBundle().URLForResource("Info", withExtension: "plist")
println(infoPlistPath)
获取应用根目录:
var homePath = NSHomeDirectory()
println(homePath)
获取Document目录:
var documentPath = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)
println(documentPath.last)
获取Library目录
var libraryPath = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.LibraryDirectory, NSSearchPathDomainMask.UserDomainMask, true)
println(libraryPath.last)
获取Library下Caches
var cachePath = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.CachesDirectory, NSSearchPathDomainMask.UserDomainMask, true)
println(cachePath.last)
获取tmp
var tmpPath = NSTemporaryDirectory()
println(tmpPath)
NSData
NSString与NSData互转
NSString转NSData
var conversionString = "is a string"
conversionString.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)
println(converedData)
// 输出:NSData(Optional):Optional(<69732061 20737472 696e67>)
NSData转NSString
var converbackString = NSString(data: converedData!, encoding: NSUTF8StringEncoding)
println(converbackString)
// 输出:NSString(Optional):Optional(is a string)
UIImage转NSData
let image = documentDir + "/bg.jpg"
let imageData: NSData = UIImageJPEGRepresentation(UIImage(named: image), 0.1)
从沙盒加载NSData类型的UIImage
// 加载NSData
let imagetest = fileManager.contentsAtPath(imagePath)
println(imagetest)
// 显示
let imageView = UIImageView(frame: view.bounds)
imageView.image = UIImage(named: imagePath)
view.addSubview(imageView)
NSFileManager文件管理
var fileManager = NSFileManager.defaultManager()
创建
文件夹
var documents = NSHomeDirectory() + "/Documents"
var dirPath = documents + "/a/b/c"
fileManager.createDirectoryAtPath(dirPath, withIntermediateDirectories: true, attributes: nil, error: nil)
// 注:withIntermediateDirectories表示当创建的目录完整路径不满足时,是否递归创建完整路径
文件
// 存储一个普通的文本文件
let stringContent = "Contnets of test"
// 将文本内容转换成NSData内容
let stringNSData = stringContent.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)
// 保存文本
fileManager.createFileAtPath(textPath, contents: stringNSData, attributes: nil)
读取
递归遍历指定目录下所有内容
var recursivelyResult = fileManager.subpathsOfDirectoryAtPath(documents, error: nil)
println(recursivelyResult)
遍历指定目录下内容
var contentResult = fileManager.contentsOfDirectoryAtPath(documents, error: nil)
println(contentResult)
判断一个文件或者文件夹是否存在
var aDir = documents + "/a"
var exsit = fileManager.fileExistsAtPath(aDir)
println(exsit)
获取一个文件或目录的属性
var attributes = fileManager.attributesOfItemAtPath(aDir, error: nil)
println(attributes)
设置文件或目录属性
Bool: fileManager.setAttributes(<#attributes: [NSObject : AnyObject]#>, ofItemAtPath: <#String#>, error: <#NSErrorPointer#>)
读取文件内容
let content = fileManager.contentsAtPath(textPath)
println(content)
移动(重命名)文件夹/文件
let newPath = documentDir + "/new.jpg"
fileManager.moveItemAtPath(imagePath, toPath: newPath, error: nil)
删除文件或文件夹
fileManager.removeItemAtPath(<#path: String#>, error: <#NSErrorPointer#>)
比较两个文件内容是否相同
let result = 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 //通过尝试解析~、..(父目录符号)、.(当前目录符号)和符号链接来标准化路径
示例:
首先预定义一个文件路径:
var filePath: NSString = "/Uesrs/anoxia/My love.mp3"
- 获取组成路径的各个部分:
println(filePath.pathComponents)
// 输出NSArray:[/, Uesrs, anoxia, My love.mp3]
- 活路路径的最后一个组成部分:
println(filePath.lastPathComponent)
// 输出:NSString:My love.mp3
- 删除路径额的最后一个组成部分:
println(filePath.stringByDeletingLastPathComponent)
// 输出:NSString:/Uesrs/anoxia
- 在路径最后添加路径:
var appendPath = "file.txt"
println(filePath.stringByAppendingPathComponent(anotherPath))
// 输出:NSString:/Uesrs/anoxia/My love.mp3/text.a
- 获取文件路径的扩展:
println(filePath.pathExtension)
// 输出: NSString:mp3
- 在路径最后面追加扩展名:
println(filePath.stringByAppendingPathExtension("a"))
// 输出:NSString(Optional):Optional("/Uesrs/anoxia/My love.mp3.a")
- 遍历应用目录
let filemanager: NSFileManager = NSFileManager()
let files = filemanager.enumeratorAtPath(NSHomeDirectory())
while let file: AnyObject = files?.nextObject() {
println(file)
}
Swift\本地文件管理的更多相关文章
- Swift - 本地数据的保存与加载(使用NSCoder将对象保存到.plist文件)
下面通过一个例子将联系人数据保存到沙盒的“documents”目录中.(联系人是一个数组集合,内部为自定义对象). 功能如下: 1,点击“保存”将联系人存入userList.plist文件中 2,点击 ...
- Swift - 本地消息的推送通知(附样例)
使用UILocalNotification可以很方便的实现消息的推送功能.我们可以设置这个消息的推送时间,推送内容等. 当推送时间一到,不管用户在桌面还是其他应用中,屏幕上方会都显示出推送消息. 1, ...
- Swift 本地推送通知UILocalNotification
Notification是智能手机应用开发中常用的信息传递机制,它不用消耗更多资源去不停的检查信息状态,可以非常好的节省资源. 在iOS中分为两种通知:本地.远程.本地的UILocalNotifica ...
- swift - 本地通知2 - 啰嗦版
1. import UIKit @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var windo ...
- swift - 本地通知
1. AppDelegate 注册 class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? fun ...
- Java语言实现简单FTP软件------>本地文件管理模块的实现(九)
首先看一下界面: 1.本地文件列表的显示功能 将本地的当前目录下所有文件显示出来,并显示文件的属性包括文件名.大小.日期.通过javax.swing.JTable()来显示具体的数据.更改当前文件目录 ...
- iOS - Swift NSFileManage 文件管理
前言 public class NSFileManager : NSObject public class NSFileHandle : NSObject, NSSecureCoding NSFile ...
- [deviceone开发]-基础文件管理器
一.简介 主要实现本地文件管理功能,主要功能为复制.粘贴.剪切目录或者文件. 二.效果 三.相关下载 https://github.com/do-project/code4do/tree/master ...
- 免费的在线Web文件管理器:Net2FTP,Pydio,eXtplorer,KodExplorer–功能强大
https://www.freehao123.com/web-ftp/ 经常有朋友在使用一些没有带文件管理器的空间时,苦于没有办法来解压上传的文件压缩包,而如果不先上传压缩包,直接上传文件夹的话耗费的 ...
随机推荐
- HTTP运行时与页面执行模型
注:本文为个人学习摘录,原文地址:http://www.cnblogs.com/stwyhm/archive/2006/08/09/471765.html HTTP运行时 HTTP运行期处理客户端应用 ...
- Events and Responder Chain
事件类型(Event Type) iOS 有三种事件类型: 触控事件(UIEventTypeTouches):单点.多点触控以及各种手势操作: 传感器事件(UIEventTypeMotion):重力. ...
- ADO.NET 数据访问类查询、属性扩展
今天,我首先在之前所做的人员管理系统的基础上,利用数据访问类进行了所有人员信息的查询. 主程序代码: List<Users> Ulist = new UsersData().Select( ...
- 学习笔记——访问者模式Visitor
访问者模式,通过Visitor的注入,为Element扩展了方法实现.虽然避免了Element不用修改即可修改,但却破坏了类的封装性,同时,一旦变更就需要增加子类,在子类方法中调用基类方法,然后再使用 ...
- # Linux Whois3获取 运营商信息
Linux Whois3获取 运营商信息 APNIC是管理亚太地区IP地址分配的机构,它有着丰富准确的IP地址分配库,同时这些信息也是对外公开的,并提供了一个查询工具,下面就让我们看看如何在Linux ...
- shape的使用
android在布局边缘位置处理圆角的两个办法: 1),一个是直接让美工切一张带有圆角的图片. 2),使用shape来解决. 第一种不在赘述,主要讲一下第二中方法来实现. 上边缘出现圆角,下边缘正常的 ...
- 框架基础:ajax设计方案(一)---集成核心请求
报告,我要说话!xp被历史淘汰了,IE6 say goodbye了,太TM开心了,从此不要兼容IE6了,哈哈哈哈哈哈 报告,我要说话!IE这sb为啥不早点被杀掉呢,找工作听说要兼容IE,立马软了,唉唉 ...
- python常用正则表达式
匹配特定数字:^[1-9]\d*//匹配正整数−[1−9]\d∗ //匹配负整数^-?[1-9]\d*//匹配整数[1−9]\d∗|0 //匹配非负整数(正整数 + 0)^-[1-9]\d*|0// ...
- Stsadm 导入导出子站点
SharePoint通过stsadm备份和还原子网站(不是网站集) 大家都知道SharePoint的stsadm命令提供了很多便捷甚至是唯一的操作方法! 这里列出的所有命令:http://www. ...
- PHP:urlencode
urlencode是用于对字符串进行编码,使得所有字符都能被放入url中,而不会被解析器误解. 正如html中的<>这样的符号是标记符,如果正文中存在<,要把它转义为< url ...