前言

	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. Calendar的问题

    1. include file is not work now. remove <!-- #include file="Calendar.js" -->, add &l ...

  2. 【jQuery UI 1.8 The User Interface Library for jQuery】.学习笔记.5.Accordion控件

    accordion是另一个UI控件,能允许你将一组content加入相互分隔的.能够被浏览者的交互打开或关闭的panels中.因此,它大多数的content在初始化的时候是隐藏的,很像tabs控件.每 ...

  3. JavaScript DOM 编程艺术(第2版)读书笔记(3)

    DOM DOM:文档对象模型: 节点 元素节点:DOM的原子是元素节点.<body>.<p>.<ul>之类的元素.元素可以包含其他的元素.没有被包含在其他元素里的唯 ...

  4. TreeView 读取 xml 显示节点

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Tree2_xml.aspx.c ...

  5. 【20160924】GOCVHelper综述

    GOCVHelper(GreenOpen Computer Version Helper )是我在这几年编写图像处理程序的过程中积累下来的函数库.主要是对Opencv的适当扩展和在实现Mfc程序时候的 ...

  6. linux下samba环境搭建

    1.安装samba apt-get install samba samba-common 2.修改配置 /etc/samba/smb.conf 在最后添加以下内容即可实现每个用户访问自己的home目录 ...

  7. C#实现中国天气网JSON接口测试

    接上一篇,经过反复的查看,最终从这篇文章中找到了一个可用的JSON接口,于是研究了一下中国天气网JSON接口的测试: 和上一篇XML接口测试的原理是一样的,只是需要安装一下Newtonsoft.Jso ...

  8. WCF 下载“http://localhost:XXX”时出错。无法连接到远程服务器。由于目标计算机积极拒绝,无法连接。

    根据理论,WCF既然查找不到该地址 应该是没打开Service,或者说该端口被防火墙保护了,关了防火墙没解决,最后一试成功了. 我的服务端和客户端都位于一个解决方案中,当运行服务端时,则 [添加服务引 ...

  9. 2016年11月28日 星期一 --出埃及记 Exodus 20:19

    2016年11月28日 星期一 --出埃及记 Exodus 20:19 and said to Moses, "Speak to us yourself and we will listen ...

  10. 洛谷 P1896 [SCOI2005]互不侵犯King

    题目描述 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子. 输入输出格式 输入格式: 只有一行,包 ...