Swift FileManage 文件管理

FileManager 是 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!)whilelet 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.txtlet 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)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 218.241.181.202 wxhl60 123456 192.168.10.253 wxhl66 wxhl6...
    CYC666閱讀 1,439評論 0 6
  • 文件操作 NSFileManager 1.NSFileManager 專門負責文件/文件夾的管理操作,包括創建/刪...
    Jackjun閱讀 2,080評論 0 1
  • iOS 開発の結構 畫面 UI UIWebview [[UIApplication sharedApplicati...
    RencaiXiong閱讀 604評論 0 0
  • 一、iOS中的沙盒機制 iOS應用程序只能對自己創建的文件系統讀取文件,這個獨立、封閉、安全的空間,叫做沙盒。它一...
    1d5cb7cff98d閱讀 1,787評論 0 0
  • 一、iOS中的沙盒機制 iOS應用程序只能對自己創建的文件系統讀取文件,這個獨立、封閉、安全的空間,叫做沙盒。它一...
    絢雨藍了個楓閱讀 4,135評論 0 2