Swift FileManage 文件管理

FileManager 是 Foundation 框架中用來管理和操作文件爬范、目錄等文件系統(tǒng)相關(guān)聯(lián)內(nèi)容的類外厂。

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"))!// 創(chuàng)建文件夾/*

public func createDirectoryAtPath(path: String,

withIntermediateDirectories createIntermediates: Bool,

attributes: [String : AnyObject]?) throws

path:文件夾路徑

createIntermediates:是否連同上一級(jí)路徑一起創(chuàng)建莽龟,NO 并且上一級(jí)文件路徑不存在時(shí)會(huì)創(chuàng)建失敗岁经。

attributes:文件夾屬性,nil 系統(tǒng)默認(rèn)屬性

*/try! nfManager.createDirectoryAtPath(folderUrl.path!, withIntermediateDirectories:true, attributes:nil)// 創(chuàng)建文件/*

func createFileAtPath(path: String,

contents data: NSData?,

attributes attr: [NSObject : AnyObject]?) -> Bool

path:文件路徑

data:文件內(nèi)容何荚,nil 空

attr:文件屬性囱淋,nil 系統(tǒng)默認(rèn)屬性

Bool:文件創(chuàng)建成功時(shí)返回值為 true

*/let bl1:Bool = nfManager.createFileAtPath(filerUrl.path!, contents:nil, attributes:nil)// 拷貝文件/*

如果 dstUrl 路徑文件已存在,該方法會(huì)終止拷貝餐塘,并返回 false妥衣。

如果 srcUrl 的最后一部分是符號(hào)鏈接,那么只有鏈接會(huì)被拷貝到新路徑戒傻。

*/try! nfManager.copyItemAtPath(srcUrl.path!, toPath: dstUrl.path!)// 刪除文件/*

刪除成功或者 url 為 nil 時(shí)返回 true税手,如果發(fā)生錯(cuò)誤返回 false。如果使用 delegate 終止了刪除文件的操作需纳,

則返回 true芦倒,如果使用 delegate 終止了刪除目錄的操作,則返回 false候齿。

*/try! nfManager.removeItemAtPath(dstUrl.path!)// 移動(dòng)文件/*

如果 dstUrl 路徑文件已存在熙暴,該方法會(huì)終止移動(dòng),并返回 false慌盯。如果 srcUrl 的最后一部分是符號(hào)鏈接周霉,

那么只有鏈接會(huì)被移動(dòng)到新路徑。鏈接所指向的內(nèi)容仍然保持在現(xiàn)有的位置亚皂。

*/try! nfManager.moveItemAtPath(srcUrl.path!, toPath: dstUrl.path!)// 查找滿足指定條件的路徑// 返回其 URL俱箱。該方法不但可以獲得標(biāo)準(zhǔn)系統(tǒng)目錄,還可以用來創(chuàng)建臨時(shí)路徑灭必。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!)// 淺遍歷// 返回指定目錄下的文件狞谱、子目錄及符號(hào)鏈接的列表let contentsDir1:[String] = try! nfManager.contentsOfDirectoryAtPath(url1.path!)// 返回文件全路徑/*

public func contentsOfDirectoryAtURL(url: NSURL,

includingPropertiesForKeys keys: [String]?,

options mask: NSDirectoryEnumerationOptions) throws -> [NSURL]

返回指定目錄下的文件、子目錄及符號(hào)鏈接的列表禁漓,返回的是文件全路徑跟衅。

url:要進(jìn)行搜索的目錄路徑,該路徑不能為指向目標(biāo)目錄的符號(hào)鏈接播歼,如果是可以使用 URLByResolvingSymlinksInPath 進(jìn)行轉(zhuǎn)換伶跷。

keys:用來傳入進(jìn)行搜索的一些特定條件,包括創(chuàng)建時(shí)間秘狞,修改時(shí)間等叭莫。

mask:SkipsHiddenFiles:表示不遍歷隱藏文件,

SkipsSubdirectoryDescendants:表示不遞歸到子目錄內(nèi)部烁试,

SkipsPackageDescendants:表示不遞歸到包內(nèi)部雇初。

*/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:要進(jìn)行搜索的目錄路徑靖诗,該路徑不能為指向目標(biāo)目錄的符號(hào)鏈接郭怪,如果是可以使用 URLByResolvingSymlinksInPath 進(jìn)行轉(zhuǎn)換。

keys:用來傳入進(jìn)行搜索的一些特定條件呻畸,包括創(chuàng)建時(shí)間移盆,修改時(shí)間等。

mask:SkipsHiddenFiles:表示不遍歷隱藏文件伤为,

SkipsSubdirectoryDescendants:表示不遞歸到子目錄內(nèi)部咒循,

SkipsPackageDescendants:表示不遞歸到包內(nèi)部。

*/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)

}// 顯示路徑的本地化名稱/*

如果指定的文件或目錄不存在绞愚,會(huì)返回 path 本身叙甸。

*/let displayName:String = nfManager.displayNameAtPath(url1.path!)// 獲取指定路徑的各種屬性let attributes:[String:AnyObject] = try! nfManager.attributesOfItemAtPath(url1.path!)// 獲取指定路徑文件的內(nèi)容數(shù)據(jù)/*

如果指定路徑為目錄或發(fā)生錯(cuò)誤,返回 nil位衩。

*/let data:NSData? = nfManager.contentsAtPath(url1.path!.stringByAppendingString("/test.txt"))// 獲取當(dāng)前路徑let currentPath:String = nfManager.currentDirectoryPath// 更改當(dāng)前路徑/*

/Users/JHQ0228/Desktop/Debug

*/let bl6:Bool = nfManager.changeCurrentDirectoryPath(NSHomeDirectory().stringByAppendingString("/Desktop/Debug"))// 獲取臨時(shí)工作路徑/*

獲取系統(tǒng)中可以用來創(chuàng)建臨時(shí)文件的目錄路徑名裆蒸,一定要在完成任務(wù)之后將在其中創(chuàng)建的文件刪除。

*/let tempPath:NSString=NSTemporaryDirectory()// 獲取用戶主路徑(沙盒路徑)let homePath:NSString=NSHomeDirectory()// 獲取指定用戶的主路徑/*

NSUserName(); 獲取當(dāng)前用戶的登錄名糖驴。NSFullUserName(); 獲取當(dāng)前用戶完整用戶名

*/let userHomePath:String? =NSHomeDirectoryForUser(NSUserName())// 獲取用戶 Documents 路徑let documentPath:NSString=NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask,true)[0]// 獲取 app 包路徑let bundlePath =NSBundle.mainBundle().bundlePath// 創(chuàng)建一個(gè)新路徑try! nfManager.createDirectoryAtPath(NSHomeDirectory().stringByAppendingString("/Desktop/Debug1"),

withIntermediateDirectories:true, attributes:nil)// 獲取最后一個(gè)路徑let lastPath:String? =NSURL(string:NSHomeDirectory().stringByAppendingString("/Desktop"))?.lastPathComponent// 刪除最后一個(gè)路徑let deleteLastPath:String? =NSURL(string:NSHomeDirectory().stringByAppendingString("/Desktop"))?

.URLByDeletingLastPathComponent?

.path// 拼接一個(gè)路徑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!)// 將路徑中的代字符 ~ 擴(kuò)展成用戶主目錄或指定用戶的主目錄// 特殊的代字符 ~ 是用戶主目錄(如:/Users/JHQ0228)的縮寫僚祷,~linda 表示用戶 linda 主目錄的縮寫。let path1:NSString="~/Desktop/test.txt";// /Users/JHQ0228/Desktop/test.txtlet mainPath:String = path1.stringByExpandingTildeInPath// 解析路徑中的符號(hào)鏈接/*

/..? ? 上一級(jí)目錄

*/let path2:NSString="~/../Debug"let appPath1:String = path2.stringByResolvingSymlinksInPath// 通過解析 ~(用戶主目錄)贮缕、..(父目錄) 辙谜、.(當(dāng)前目錄)和符號(hào)鏈接來標(biāo)準(zhǔn)化路徑/*

NSHomeDirectory()/..? ? NSHomeDirectory() 的上一級(jí)目錄

*/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)// 判斷路徑是否存在/*

如果當(dāng)前路徑以~開頭感昼,需使用 NSString 的 stringByExpandingTildeInPath 方法進(jìn)行處理装哆,否則會(huì)返回 false

*/let bl1:Bool = nfManager.fileExistsAtPath(url1.path!)// 判斷指定路徑是否有可讀權(quán)限let bl2:Bool = nfManager.isReadableFileAtPath(url1.path!)// 判斷指定路徑是否有可寫權(quán)限let bl3:Bool = nfManager.isWritableFileAtPath(url1.path!)// 判斷指定路徑是否有可執(zhí)行權(quán)限let bl4:Bool = nfManager.isExecutableFileAtPath(url1.path!)// 判斷指定路徑是否有可刪除權(quán)限let bl5:Bool = nfManager.isDeletableFileAtPath(url1.path!)// 判斷兩個(gè)指定路徑的內(nèi)容是否相同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// 將偏移量移到文件末尾定嗓,返回移動(dòng)后的指針偏移量let offSetNum2:UInt64= nfHandle.seekToEndOfFile()// 將偏移量指向特定的位置nfHandle.seekToFileOffset(0)// 文件讀取// 獲取當(dāng)前文件句柄的可用數(shù)據(jù)蜕琴,獲取后指針移到文件末尾let availableData:NSData= nfHandle.availableData// 獲取從當(dāng)前指針位置到文件結(jié)束的所有數(shù)據(jù),獲取后指針移到文件末尾let data1:NSData= nfHandle.readDataToEndOfFile()// 獲取從當(dāng)前指針位置開始讀取的 length 長度的數(shù)據(jù)內(nèi)容宵溅,獲取后指針移到文件讀取到的位置let data2:NSData= nfHandle.readDataOfLength(10)// 文件寫入// 從當(dāng)前指針位置寫入數(shù)據(jù)到文件nfHandle.writeData("你好".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion:true)!)// 文件關(guān)閉// 關(guān)閉文件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)// 比較兩個(gè)文件的內(nèi)容是否相等let bl:Bool = nfManager.contentsEqualAtPath(filePath1, andPath: filePath2)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末凌简,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子恃逻,更是在濱河造成了極大的恐慌雏搂,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,591評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件辛块,死亡現(xiàn)場離奇詭異,居然都是意外死亡铅碍,警方通過查閱死者的電腦和手機(jī)润绵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來胞谈,“玉大人尘盼,你說我怎么就攤上這事憨愉。” “怎么了卿捎?”我有些...
    開封第一講書人閱讀 162,823評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵配紫,是天一觀的道長。 經(jīng)常有香客問我午阵,道長躺孝,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,204評(píng)論 1 292
  • 正文 為了忘掉前任底桂,我火速辦了婚禮植袍,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘籽懦。我一直安慰自己于个,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評(píng)論 6 388
  • 文/花漫 我一把揭開白布暮顺。 她就那樣靜靜地躺著厅篓,像睡著了一般。 火紅的嫁衣襯著肌膚如雪捶码。 梳的紋絲不亂的頭發(fā)上羽氮,一...
    開封第一講書人閱讀 51,190評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音宙项,去河邊找鬼乏苦。 笑死,一個(gè)胖子當(dāng)著我的面吹牛尤筐,可吹牛的內(nèi)容都是我干的汇荐。 我是一名探鬼主播,決...
    沈念sama閱讀 40,078評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼盆繁,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼掀淘!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起油昂,我...
    開封第一講書人閱讀 38,923評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤革娄,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后冕碟,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體拦惋,經(jīng)...
    沈念sama閱讀 45,334評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評(píng)論 2 333
  • 正文 我和宋清朗相戀三年安寺,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了厕妖。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,727評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡挑庶,死狀恐怖言秸,靈堂內(nèi)的尸體忽然破棺而出软能,到底是詐尸還是另有隱情,我是刑警寧澤举畸,帶...
    沈念sama閱讀 35,428評(píng)論 5 343
  • 正文 年R本政府宣布查排,位于F島的核電站,受9級(jí)特大地震影響抄沮,放射性物質(zhì)發(fā)生泄漏跋核。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評(píng)論 3 326
  • 文/蒙蒙 一合是、第九天 我趴在偏房一處隱蔽的房頂上張望了罪。 院中可真熱鬧,春花似錦聪全、人聲如沸泊藕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽娃圆。三九已至,卻和暖如春蛾茉,著一層夾襖步出監(jiān)牢的瞬間讼呢,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評(píng)論 1 269
  • 我被黑心中介騙來泰國打工谦炬, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留悦屏,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,734評(píng)論 2 368
  • 正文 我出身青樓键思,卻偏偏與公主長得像础爬,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子吼鳞,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 218.241.181.202 wxhl60 123456 192.168.10.253 wxhl66 wxhl6...
    CYC666閱讀 1,380評(píng)論 0 6
  • 文件操作 NSFileManager 1.NSFileManager 專門負(fù)責(zé)文件/文件夾的管理操作看蚜,包括創(chuàng)建/刪...
    Jackjun閱讀 2,051評(píng)論 0 1
  • iOS 開発の結(jié)構(gòu) 畫面 UI UIWebview [[UIApplication sharedApplicati...
    RencaiXiong閱讀 583評(píng)論 0 0
  • 一、iOS中的沙盒機(jī)制 iOS應(yīng)用程序只能對(duì)自己創(chuàng)建的文件系統(tǒng)讀取文件赔桌,這個(gè)獨(dú)立供炎、封閉、安全的空間疾党,叫做沙盒音诫。它一...
    1d5cb7cff98d閱讀 1,770評(píng)論 0 0
  • 一、iOS中的沙盒機(jī)制 iOS應(yīng)用程序只能對(duì)自己創(chuàng)建的文件系統(tǒng)讀取文件雪位,這個(gè)獨(dú)立竭钝、封閉、安全的空間,叫做沙盒蜓氨。它一...
    絢雨藍(lán)了個(gè)楓閱讀 4,096評(píng)論 0 2