前言

	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. Oracle通过sqlplus spool导入导出数据

    第一部分(实例,主要分两步),第二部分(参数小总结),第三部分(完全参数总结) 第一部分 第一步 :这是我的导出数据的脚本call.sqlconn scott/tigerset echo offset ...

  2. 29、Oralce(五)

    1)掌握PLSQL程序设计 2)掌握存储过程,函数和触发器 3)了解一些oralceSQL语句优化方案 ------------------------------------------------ ...

  3. 杭电1071-The area

    问题描述:   Ignatius bought a land last week, but he didn't know the area of the land because the land i ...

  4. 单利 复利计算器程序1.0 2.0 3.0 [ 合 ] 之 C语言

    本程序用C语言编写~~~ 1.计算:本金为100万,利率或者投资回报率为3%,投资年限为30年,那么,30年后所获得的利息收入:按复利计算公式来计算就是:1,000,000×(1+3%)^30 1 v ...

  5. 逆序数还原(FZU)

    逆序数还原 Accept: 244 Submit: 451 Time Limit: 1000 mSec Memory Limit : 32768 KB Problem Description 有一段时 ...

  6. Java 使用 Stream API 筛选 List

    前言 上课的时候看到老师用迭代器来遍历 List 中的元素的时候,我的内心是极其嫌弃的,这种迭代方法不能直接访问当前的元素,而且写起来也麻烦.于是上网查了查 Java 有没有类似于 Linq 的东西, ...

  7. 启动Print Spooler服务提示:"错误1068,依存服务或无法启动"

    本人windows8操作系统,从网上看到在运行中输入  sc config spooler depend= rpcss 即可,试了下果然有效.具体原因待了解.

  8. 【转载】COM:IUnknown、IClassFactory、IDispatch

    原文:COM:IUnknown.IClassFactory.IDispatch COM组件有三个最基本的接口类,分别是IUnknown.IClassFactory.IDispatch. COM规范规定 ...

  9. 正则表达式(/[^0-9]/g,'')中的"/g"是什么意思 ?

    正则表达式(/[^0-9]/g,'')中的"/g"是什么意思 ?     表达式加上参数g之后,表明可以进行全局匹配,注意这里“可以”的含义.我们详细叙述: 1)对于表达式对象的e ...

  10. matplotlib

    前导: 安装 numpy http://sourceforge.net/projects/numpy/files/ http://sourceforge.net/projects/numpy/file ...