转载自: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) } 

 

转载于:https://www.cnblogs.com/Jenaral/p/5531346.html

Swift\本地文件管理相关推荐

  1. Github(3)-本地文件管理

    使用github 托管代码简单使用教程--本地文件管理 1.基本概念 2.本地文件管理 2.1 git add 2.2 git status 2.3 git commit 2.3 git log 2. ...

  2. Android本地文件管理器思路解析一一增删改查具体实现

    花了一天的时间撸完了Android本地文件管理器~!!GitHub下载地址为:PumpkinFileManager 南瓜文件管理器1.0. 功能列表: 1: 实现了在ListView中浏览本地所有文件 ...

  3. Swift - 本地消息的推送通知(附样例)

    使用UILocalNotification可以很方便的实现消息的推送功能.我们可以设置这个消息的推送时间,推送内容等. 当推送时间一到,不管用户在桌面还是其他应用中,屏幕上方会都显示出推送消息. 1, ...

  4. ForkLift 3.5.6 远程/本地文件管理利器

    Forklift 是一款经典两栏界面布局的软件,允许托拽. 它通吃 FTP, SFTP, WebDAV, S3, iDisk, SMB, AFP 和 NIS 协议,可功能远远超越 FTP 等协议的范畴 ...

  5. Android进入本地文件管理器及不同文件查看

    1.进入本地文件(添加文件): Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType("*/*" ...

  6. Swift 本地推送通知UILocalNotification

    Notification是智能手机应用开发中常用的信息传递机制,它不用消耗更多资源去不停的检查信息状态,可以非常好的节省资源. 在iOS中分为两种通知:本地.远程.本地的UILocalNotifica ...

  7. .net 本地文件管理 代码_Gitee 在线解决代码冲突上线,解决冲突不再需要 Git 命令...

    IT服务圈儿 有温度.有态度的IT自媒体平台 来源: OSCHINA 社区 [http://www.oschina.net] 作者:码云Gitee 许多开发者在使用 Git 的时候会遇到代码冲突的情况 ...

  8. .net 本地文件管理 代码_如何在百万行代码中发现隐藏的后门

    试想一下,如果你的网站被入侵,攻击者留下隐藏的后门,你真的都可以找出来嘛?面对一个大中型的应用系统,数以百万级的代码行,是不可能做到每个文件每段代码进行手工检查的. 即使是一款拥有99.9%的Webs ...

  9. java实现的本地文件管理器——仿Windows文件资源管理器

    完整项目文件下载链接:点击打开链接 实现的功能有: 1.    模仿Windows的文件资源管理器对本机的文件目录树的显示,对文件目录进行查看和浏览,用地址栏.文件目录树.打开文件夹等方法都可以在文件 ...

最新文章

  1. 飞书与德勤管理咨询达成战略合作,赋能企业实现智慧运营与管理
  2. mysql date_format 按不同时间单位进行分组统计
  3. 科目二倒车入库不论怎么都能入进去的方法
  4. Linux系统管理命令:date、free、ps、du、kill、uname
  5. SpringBoot中使用Redis数据库
  6. vue学习:事件传递(冒泡和捕获),事件委托,jquery中的事件委托,$event 获取元素,vue事件修饰符
  7. web.config配置Access数据库 (C#) ASP.NET+ACCESS
  8. python监控linux运行程序_如何在linux/tcl/python中监控正在打开或启动的应用程序?...
  9. 任务寄存器TR:GDT、LDT、IDT、TR、TSS之间的关系
  10. java二维数组扫雷,Java 数组 之 二维数组 扫雷实例
  11. swift. 扩展类添加属性_swift 扩展属性的方法
  12. 同指数幂相减公式_指数相减.即所以同底数幂的除法法则.PPT
  13. java 开源发布系统_18个Java开源CMS系统一览
  14. 【每周论文】Graphene: Packing and Dependency-aware Scheduling for Data-Parallel Clusters(OSDI 2016)
  15. 通用技术金工工艺高考必考必看的知识点含攻丝与套丝讲解
  16. 判断是否为奇数时:除以2余数等于1.(充分而不必要)
  17. python 统计.txt中比较句个数,五元组的个数、以及有多少重复的op(以五元组为统计单位)
  18. 将jsp文件导入页面
  19. 【Windows】Windows10系统获取文件夹下的文件名方法
  20. Spark-Shell操作

热门文章

  1. 大疆精灵4航测输出正摄影和三维模型教程
  2. 2022年营收增长高达70%,智云健康“医院为先”战略成效持续凸显
  3. 一个神奇的测试_被套住就要说真话!《神奇女侠》的作者真的发明过测谎仪
  4. Pytorch遇到权重不匹配的问题
  5. (三十一:2021.01.12)MICCAI 2018 追踪之论文纲要(下)
  6. 红蓝对抗场景下的二三事
  7. java红牛农场,在新加坡的,完一朋友一个夜班喝5瓶红牛。 下班坐地
  8. R语言分组求和,分组求平均值,分组计数
  9. redux入门_Redux入门
  10. 汽车半导体FMEDA的挑战和解决方案