前言

	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 文件管理的更多相关文章

  1. iOS swift的xcworkspace多项目管理(架构思想)

    iOS  swift的xcworkspace多项目管理(架构思想) 技术说明: 今天在这里分享 swift下的 xcworkspace多项目管理(架构思想),能为我们在开发中带来哪些便捷?能为我们对整 ...

  2. iOS Swift 模块练习/swift基础学习

    SWIFT项目练习     SWIFT项目练习2 iOS Swift基础知识代码 推荐:Swift学习使用知识代码软件 0.swift中的宏定义(使用方法代替宏) 一.视图  +控件 1.UIImag ...

  3. ios swift 实现饼状图进度条,swift环形进度条

    ios swift 实现饼状图进度条 // // ProgressControl.swift // L02MyProgressControl // // Created by plter on 7/2 ...

  4. Building gRPC Client iOS Swift Note Taking App

    gRPC is an universal remote procedure call framework developed by Google that has been gaining inter ...

  5. iOS Swift WisdomScanKit图片浏览器功能SDK

    iOS Swift WisdomScanKit图片浏览器功能SDK使用 一:简介      WisdomScanKit 由 Swift4.2版编写,完全兼容OC项目调用. WisdomScanKit的 ...

  6. iOS Swift WisdomScanKit二维码扫码SDK,自定义全屏拍照SDK,系统相册图片浏览,编辑SDK

    iOS Swift WisdomScanKit 是一款强大的集二维码扫码,自定义全屏拍照,系统相册图片编辑多选和系统相册图片浏览功能于一身的 Framework SDK [1]前言:    今天给大家 ...

  7. iOS Swift WisdomHUD 提示界面框架

    iOS Swift WisdomHUD 提示界面框架  Framework Use profile(应用简介) 一:WisdomHUD简介 今天给大家介绍一款iOS的界面显示器:WisdomHUD,W ...

  8. iOS Swift WisdomKeyboardKing 键盘智能管家SDK

    iOS Swift WisdomKeyboardKing 键盘智能管家SDK [1]前言:    今天给大家推荐个好用的开源框架:WisdomKeyboardKing,方面iOS日常开发,优点和功能请 ...

  9. iOS swift项目IM实现,从长连接到数据流解析分析之Socket

    iOS  swift项目IM实现,从长连接到底层数据解析分析之Socket 一:项目简介:  去年开始接手了一个国企移动项目,项目的需求是实现IM即时通讯功能. * 一期版本功能包括了:       ...

随机推荐

  1. jython学习笔记2

    1.%是求余,//是整除的商,**是乘方 abs(var) Absolute value pow(x, y) Can be used in place of ** operator pow(x,y,m ...

  2. 【PHP设计模式 04_GongChang.php】 工厂方法

    <?php /** * [工厂方法] * 之前 03.php 简单工厂,如果再增加一个oracle客户端,就需要再次修改服务端Factory的代码. * 在面向对象设计法则中,有一个重要的[开闭 ...

  3. HLS视频直播

    HTTP Live Streaming (HLS) 苹果官方对于视频直播服务提出了 HLS 解决方案,该方案主要适用范围在于: 使用 iPhone .iPod touch. iPad 以及 Apple ...

  4. ectouch第九讲 之ectouch 开始调试模式方法

    ectouch 开始调试模式方法 原文: http://my.oschina.net/u/1036767/blog/407067页面报错对于发现编程过程中的问题很重要,所以在开发之前要先搞定它,免得出 ...

  5. 层叠样式表(CSS)

    层叠样式表(CSS) CSS(Cascading Style Sheet)中文译为层叠样式表.是用于控制网页样式并允许将样式信息与网页内容分离的一种标记性语言.CSS的引入就是为了使得HTML语言能够 ...

  6. Python 深拷贝和浅拷贝

    Python中,对象的赋值,拷贝(深/浅拷贝)之间是有差异的,如果使用的时候不注意,就可能产生意外的结果. 下面本文就通过简单的例子介绍一下这些概念之间的差别. 对象赋值 直接看一段代码: will= ...

  7. 哈希-Gold Balanced Lineup 分类: POJ 哈希 2015-08-07 09:04 2人阅读 评论(0) 收藏

    Gold Balanced Lineup Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 13215 Accepted: 3873 ...

  8. 线程池原理及创建(C++实现)

    http://www.cnblogs.com/lidabo/p/3328402.html 本文给出了一个通用的线程池框架,该框架将与线程执行相关的任务进行了高层次的抽象,使之与具体的执行任务无关.另外 ...

  9. JAVA fundamentals of exception handling mechanism

    Agenda Three Categories Of Exceptions Exceptions Hierarchy try-catch-finally block The try-with-reso ...

  10. Uva 116,单向TSP

    题目链接:https://uva.onlinejudge.org/external/1/116.pdf 和矩形嵌套,巴比伦塔差不多. 题意: 给出矩阵,这个矩阵是环形的,就是说第一行的上一行是最后一行 ...