iOS - Swift NSFileManage 文件管理
前言
public class NSFileManager : NSObject
public class NSFileHandle : NSObject, NSSecureCoding
- NSFileManager 是 Foundation 框架中用来管理和操作文件、目录等文件系统相关联内容的类。
1、路径操作
let nfManager = NSFileManager.defaultManager()
let folderUrl:NSURL = NSURL(string: NSHomeDirectory().stringByAppendingString("/Desktop/testFolder"))!
let filerUrl:NSURL = NSURL(string: NSHomeDirectory().stringByAppendingString("/Desktop/testFile.txt"))!
let srcUrl:NSURL = NSURL(string: NSHomeDirectory().stringByAppendingString("/Desktop/testFile.txt"))!
let dstUrl:NSURL = NSURL(string: NSHomeDirectory().stringByAppendingString("/Desktop/testFolder/testFile.txt"))!
// 创建文件夹
/*
public func createDirectoryAtPath(path: String,
withIntermediateDirectories createIntermediates: Bool,
attributes: [String : AnyObject]?) throws
path:文件夹路径
createIntermediates:是否连同上一级路径一起创建,NO 并且上一级文件路径不存在时会创建失败。
attributes:文件夹属性,nil 系统默认属性
*/
try! nfManager.createDirectoryAtPath(folderUrl.path!, withIntermediateDirectories: true, attributes: nil)
// 创建文件
/*
func createFileAtPath(path: String,
contents data: NSData?,
attributes attr: [NSObject : AnyObject]?) -> Bool
path:文件路径
data:文件内容,nil 空
attr:文件属性,nil 系统默认属性
Bool:文件创建成功时返回值为 true
*/
let bl1:Bool = nfManager.createFileAtPath(filerUrl.path!, contents: nil, attributes: nil)
// 拷贝文件
/*
如果 dstUrl 路径文件已存在,该方法会终止拷贝,并返回 false。
如果 srcUrl 的最后一部分是符号链接,那么只有链接会被拷贝到新路径。
*/
try! nfManager.copyItemAtPath(srcUrl.path!, toPath: dstUrl.path!)
// 删除文件
/*
删除成功或者 url 为 nil 时返回 true,如果发生错误返回 false。如果使用 delegate 终止了删除文件的操作,
则返回 true,如果使用 delegate 终止了删除目录的操作,则返回 false。
*/
try! nfManager.removeItemAtPath(dstUrl.path!)
// 移动文件
/*
如果 dstUrl 路径文件已存在,该方法会终止移动,并返回 false。如果 srcUrl 的最后一部分是符号链接,
那么只有链接会被移动到新路径。链接所指向的内容仍然保持在现有的位置。
*/
try! nfManager.moveItemAtPath(srcUrl.path!, toPath: dstUrl.path!)
// 查找满足指定条件的路径
// 返回其 URL。该方法不但可以获得标准系统目录,还可以用来创建临时路径。
let url1:NSURL = try! nfManager.URLForDirectory(.DocumentDirectory,
inDomain: .UserDomainMask,
appropriateForURL: nil,
create: true)
// 返回所有满足条件的路径列表
let urlObjs:[NSURL] = nfManager.URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)
let url2:NSURL = urlObjs[0]
// 查询指定路径下的所有子路径
let urls1:[String]? = nfManager.subpathsAtPath(url1.path!)
let urls2:[String] = try! nfManager.subpathsOfDirectoryAtPath(url1.path!)
// 浅遍历
// 返回指定目录下的文件、子目录及符号链接的列表
let contentsDir1:[String] = try! nfManager.contentsOfDirectoryAtPath(url1.path!)
// 返回文件全路径
/*
public func contentsOfDirectoryAtURL(url: NSURL,
includingPropertiesForKeys keys: [String]?,
options mask: NSDirectoryEnumerationOptions) throws -> [NSURL]
返回指定目录下的文件、子目录及符号链接的列表,返回的是文件全路径。
url:要进行搜索的目录路径,该路径不能为指向目标目录的符号链接,如果是可以使用 URLByResolvingSymlinksInPath 进行转换。
keys:用来传入进行搜索的一些特定条件,包括创建时间,修改时间等。
mask:SkipsHiddenFiles:表示不遍历隐藏文件,
SkipsSubdirectoryDescendants:表示不递归到子目录内部,
SkipsPackageDescendants:表示不递归到包内部。
*/
let contentsDir2:[NSURL] = try! nfManager.contentsOfDirectoryAtURL(url1,
includingPropertiesForKeys: nil,
options: .SkipsHiddenFiles)
// 深遍历
// 返回指定目录下的所有文件及其子目录下的所有元素路径
let enumeratorDir1:NSDirectoryEnumerator = nfManager.enumeratorAtPath(url1.path!)!
// 返回文件全路径
/*
func enumeratorAtURL(url: NSURL,
includingPropertiesForKeys keys: [AnyObject]?,
options mask: NSDirectoryEnumerationOptions,
errorHandler handler: ((NSURL!, NSError!) -> Bool)?) -> NSDirectoryEnumerator?
返回指定目录下的所有文件及其子目录下的所有元素路径,返回的是文件全路径。
url:要进行搜索的目录路径,该路径不能为指向目标目录的符号链接,如果是可以使用 URLByResolvingSymlinksInPath 进行转换。
keys:用来传入进行搜索的一些特定条件,包括创建时间,修改时间等。
mask:SkipsHiddenFiles:表示不遍历隐藏文件,
SkipsSubdirectoryDescendants:表示不递归到子目录内部,
SkipsPackageDescendants:表示不递归到包内部。
*/
let enumeratorDir2:NSDirectoryEnumerator = nfManager.enumeratorAtURL(url1,
includingPropertiesForKeys: nil,
options: .SkipsHiddenFiles,
errorHandler: nil)!
// 枚举遍历深层遍历
let dEnu:NSDirectoryEnumerator? = nfManager.enumeratorAtPath(url1.path!)
while let obj:AnyObject? = dEnu?.nextObject() {
print(obj)
}
// 显示路径的本地化名称
/*
如果指定的文件或目录不存在,会返回 path 本身。
*/
let displayName:String = nfManager.displayNameAtPath(url1.path!)
// 获取指定路径的各种属性
let attributes:[String:AnyObject] = try! nfManager.attributesOfItemAtPath(url1.path!)
// 获取指定路径文件的内容数据
/*
如果指定路径为目录或发生错误,返回 nil。
*/
let data:NSData? = nfManager.contentsAtPath(url1.path!.stringByAppendingString("/test.txt"))
// 获取当前路径
let currentPath:String = nfManager.currentDirectoryPath
// 更改当前路径
/*
/Users/JHQ0228/Desktop/Debug
*/
let bl6:Bool = nfManager.changeCurrentDirectoryPath(NSHomeDirectory().stringByAppendingString("/Desktop/Debug"))
// 获取临时工作路径
/*
获取系统中可以用来创建临时文件的目录路径名,一定要在完成任务之后将在其中创建的文件删除。
*/
let tempPath:NSString = NSTemporaryDirectory()
// 获取用户主路径(沙盒路径)
let homePath:NSString = NSHomeDirectory()
// 获取指定用户的主路径
/*
NSUserName(); 获取当前用户的登录名。NSFullUserName(); 获取当前用户完整用户名
*/
let userHomePath:String? = NSHomeDirectoryForUser(NSUserName())
// 获取用户 Documents 路径
let documentPath:NSString = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0]
// 获取 app 包路径
let bundlePath = NSBundle.mainBundle().bundlePath
// 创建一个新路径
try! nfManager.createDirectoryAtPath(NSHomeDirectory().stringByAppendingString("/Desktop/Debug1"),
withIntermediateDirectories: true, attributes: nil)
// 获取最后一个路径
let lastPath:String? = NSURL(string: NSHomeDirectory().stringByAppendingString("/Desktop"))?.lastPathComponent
// 删除最后一个路径
let deleteLastPath:String? = NSURL(string: NSHomeDirectory().stringByAppendingString("/Desktop"))?
.URLByDeletingLastPathComponent?
.path
// 拼接一个路径
let appendingPath:String? = NSURL(string: NSHomeDirectory().stringByAppendingString("/Desktop"))?
.URLByAppendingPathComponent("testFolder")
.path
// 文件路径分割
let pathArray:[String]? = NSURL(string: NSHomeDirectory().stringByAppendingString("/Desktop"))?.pathComponents
// 文件路径组合
let pathString:NSString = NSString.pathWithComponents(pathArray!)
// 将路径中的代字符 ~ 扩展成用户主目录或指定用户的主目录
// 特殊的代字符 ~ 是用户主目录(如:/Users/JHQ0228)的缩写,~linda 表示用户 linda 主目录的缩写。
let path1:NSString = "~/Desktop/test.txt";
// /Users/JHQ0228/Desktop/test.txt
let mainPath:String = path1.stringByExpandingTildeInPath
// 解析路径中的符号链接
/*
/.. 上一级目录
*/
let path2:NSString = "~/../Debug"
let appPath1:String = path2.stringByResolvingSymlinksInPath
// 通过解析 ~(用户主目录)、..(父目录) 、.(当前目录)和符号链接来标准化路径
/*
NSHomeDirectory()/.. NSHomeDirectory() 的上一级目录
*/
let path3:NSString = NSString(format:"%@/../Debug", NSHomeDirectory())
let appPath2:String = path3.stringByStandardizingPath
// 获取文件拓展名
let getExtension:String? = NSURL(string: "/Desktop/test.txt")?.pathExtension
// 删除文件拓展名
let deleteExtension:String? = NSURL(string: "/Desktop/test.txt")?.URLByDeletingPathExtension?.pathExtension
// 拼接文件拓展名
let appendingExtension:String? = NSURL(string: "/Desktop/test.txt")?.URLByAppendingPathExtension("doc").path
2、路径判断
let nfManager = NSFileManager.defaultManager()
let url1:NSURL = try! nfManager.URLForDirectory(.DocumentDirectory,
inDomain: .UserDomainMask,
appropriateForURL: nil,
create: true)
// 判断路径是否存在
/*
如果当前路径以~开头,需使用 NSString 的 stringByExpandingTildeInPath 方法进行处理,否则会返回 false
*/
let bl1:Bool = nfManager.fileExistsAtPath(url1.path!)
// 判断指定路径是否有可读权限
let bl2:Bool = nfManager.isReadableFileAtPath(url1.path!)
// 判断指定路径是否有可写权限
let bl3:Bool = nfManager.isWritableFileAtPath(url1.path!)
// 判断指定路径是否有可执行权限
let bl4:Bool = nfManager.isExecutableFileAtPath(url1.path!)
// 判断指定路径是否有可删除权限
let bl5:Bool = nfManager.isDeletableFileAtPath(url1.path!)
// 判断两个指定路径的内容是否相同
let bl6:Bool = nfManager.contentsEqualAtPath(url1.path!,
andPath: url1.path!.stringByAppendingString("/test.txt"))
3、文件操作
let fileUrl:NSURL = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory,
inDomains: .UserDomainMask)[0]
as! NSURL
// 文件打开
// 读写
var nfHandle = NSFileHandle(forUpdatingAtPath: fileUrl.path!.stringByAppendingString("/test.txt"))!
// 只读
var nfHandle1 = NSFileHandle(forReadingAtPath: fileUrl.path!.stringByAppendingString("/test.txt"))!
// 只写
var nfHandle2 = NSFileHandle(forWritingAtPath: fileUrl.path!.stringByAppendingString("/test.txt"))!
// 文件句柄偏移量
// 获取文件句柄指针的偏移量
let offSetNum1:UInt64 = nfHandle.offsetInFile
// 将偏移量移到文件末尾,返回移动后的指针偏移量
let offSetNum2:UInt64 = nfHandle.seekToEndOfFile()
// 将偏移量指向特定的位置
nfHandle.seekToFileOffset(0)
// 文件读取
// 获取当前文件句柄的可用数据,获取后指针移到文件末尾
let availableData:NSData = nfHandle.availableData
// 获取从当前指针位置到文件结束的所有数据,获取后指针移到文件末尾
let data1:NSData = nfHandle.readDataToEndOfFile()
// 获取从当前指针位置开始读取的 length 长度的数据内容,获取后指针移到文件读取到的位置
let data2:NSData = nfHandle.readDataOfLength(10)
// 文件写入
// 从当前指针位置写入数据到文件
nfHandle.writeData("你好".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)!)
// 文件关闭
// 关闭文件
nfHandle.closeFile()
// 文件比较
let nfManager = NSFileManager.defaultManager()
// 文件路径
let filePath1:String = NSHomeDirectory().stringByAppendingString("/Desktop/file1.txt")
let filePath2:String = NSHomeDirectory().stringByAppendingString("/Desktop/file2.txt")
nfManager.createFileAtPath(filePath1,
contents: "北京欢迎您".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true),
attributes: nil)
nfManager.createFileAtPath(filePath2,
contents: "北京欢迎".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true),
attributes: nil)
// 比较两个文件的内容是否相等
let bl:Bool = nfManager.contentsEqualAtPath(filePath1, andPath: filePath2)
iOS - Swift NSFileManage 文件管理的更多相关文章
- iOS swift的xcworkspace多项目管理(架构思想)
iOS swift的xcworkspace多项目管理(架构思想) 技术说明: 今天在这里分享 swift下的 xcworkspace多项目管理(架构思想),能为我们在开发中带来哪些便捷?能为我们对整 ...
- iOS Swift 模块练习/swift基础学习
SWIFT项目练习 SWIFT项目练习2 iOS Swift基础知识代码 推荐:Swift学习使用知识代码软件 0.swift中的宏定义(使用方法代替宏) 一.视图 +控件 1.UIImag ...
- ios swift 实现饼状图进度条,swift环形进度条
ios swift 实现饼状图进度条 // // ProgressControl.swift // L02MyProgressControl // // Created by plter on 7/2 ...
- Building gRPC Client iOS Swift Note Taking App
gRPC is an universal remote procedure call framework developed by Google that has been gaining inter ...
- iOS Swift WisdomScanKit图片浏览器功能SDK
iOS Swift WisdomScanKit图片浏览器功能SDK使用 一:简介 WisdomScanKit 由 Swift4.2版编写,完全兼容OC项目调用. WisdomScanKit的 ...
- iOS Swift WisdomScanKit二维码扫码SDK,自定义全屏拍照SDK,系统相册图片浏览,编辑SDK
iOS Swift WisdomScanKit 是一款强大的集二维码扫码,自定义全屏拍照,系统相册图片编辑多选和系统相册图片浏览功能于一身的 Framework SDK [1]前言: 今天给大家 ...
- iOS Swift WisdomHUD 提示界面框架
iOS Swift WisdomHUD 提示界面框架 Framework Use profile(应用简介) 一:WisdomHUD简介 今天给大家介绍一款iOS的界面显示器:WisdomHUD,W ...
- iOS Swift WisdomKeyboardKing 键盘智能管家SDK
iOS Swift WisdomKeyboardKing 键盘智能管家SDK [1]前言: 今天给大家推荐个好用的开源框架:WisdomKeyboardKing,方面iOS日常开发,优点和功能请 ...
- iOS swift项目IM实现,从长连接到数据流解析分析之Socket
iOS swift项目IM实现,从长连接到底层数据解析分析之Socket 一:项目简介: 去年开始接手了一个国企移动项目,项目的需求是实现IM即时通讯功能. * 一期版本功能包括了: ...
随机推荐
- nginx+tomcat负载均衡+动静分离+redis集中管理session
1.服务器A安装ng,服务器B.C安装tomcat: 2.服务器A建立/data/www目录,用于发布静态文件: 3.ng无动静分离配置: user root root; worker_process ...
- 3.1将AngularJS放入上下文
本章,作者将AngularJS放在全球web app开发的上下文里,并为后面的章节设置功能.AngularJS的目标,是带来一款工具,它有服务端开发web client的能力,并易于开发,测试,富.复 ...
- 苹果app审核的规则总结
1.1为App Store开发程序,开发者必须遵守 Program License Agreement (PLA).人机交互指南(HIG)以及开发者和苹果签订的任何协议和合同.以下规则和示例旨在帮助开 ...
- centos7.1-64bit延时截屏
centos自带了截屏的软件,而且还能延时截屏. 在桌面左上角的应用程序菜单里: “应用程序”->“工具”->“截图” 设定延时秒数,点击“截图”按钮,开始截图. 完.
- BLOB:大数据,大对象,在数据库中用来存储超长文本的数据,例如图片等
将一张图片存储在mysql中,并读取出来(BLOB数据:插入BLOB类型的数据必须使用PreparedStatement,因为插入BLOB类型的数据无法使用字符串拼写): -------------- ...
- JQuery知识快览之三—JQuery对象集
本文讲述JQuery对象集的各相关知识 获取JQuery对象集 JQuery对象,和DOM对象是两个不同的东西,JQuery对象可以是DOM对象的封装,但是JQuery对象不只是DOM对象的封装,它还 ...
- THE DRUNK JAILER 分类: POJ 2015-06-10 14:50 13人阅读 评论(0) 收藏
THE DRUNK JAILER Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 24918 Accepted: 1563 ...
- Servlet基础(下)
10.Servlet定义初始化参数必须使用web.xml中的init-param/para-name和 para-value元素;11.ServletConfig对象的getInitParameter ...
- Jquery中的filter()详细说明和transition的用法
filter() 方法将匹配元素集合缩减为匹配指定选择器的元素. 详细说明 如果给定表示 DOM 元素集合的 jQuery 对象,.filter() 方法会用匹配元素的子集构造一个新的 jQuery ...
- 2016 Al-Baath University Training Camp Contest-1 J
Description X is fighting beasts in the forest, in order to have a better chance to survive he's gon ...