1. 程式人生 > >swift之FileManager的操作

swift之FileManager的操作

      1)首先我們獲取使用者文件目錄路徑

        let manager = FileManager.default

        let urlForDocument = manager.urls(for: .documentDirectory, in:.userDomainMask)

        let url = urlForDocument[0] as URL

        print(url)

//        (2)對指定路徑執行淺搜尋,返回指定目錄路徑下的檔案、子目錄及符號連結的列表

        let contentsOfPath = try? manager.contentsOfDirectory

(atPath: url.path)

        print("contentsOfPath: \(contentsOfPath)")

//        (3)類似上面的,對指定路徑執行淺搜尋,返回指定目錄路徑下的檔案、子目錄及符號連結的列表

        let contentsOfURL = try? manager.contentsOfDirectory(at: url,

                                                             includingPropertiesForKeys: nil, options: .skipsHiddenFiles

)

        print("contentsOfURL: \(contentsOfURL)")

//        (4)深度遍歷,會遞迴遍歷子資料夾(但不會遞迴符號連結)

        let enumeratorAtPath = manager.enumerator(atPath: url.path)

        print("enumeratorAtPath: \(enumeratorAtPath?.allObjects)")

//        (5)類似上面的,深度遍歷,會遞迴遍歷子資料夾(但不會遞迴符號連結)

        let enumeratorAtURL = manager.enumerator

(at: url, includingPropertiesForKeys: nil,

                                                 options: .skipsHiddenFiles, errorHandler:nil)

        print("enumeratorAtURL: \(enumeratorAtURL?.allObjects)")

//        (6)深度遍歷,會遞迴遍歷子資料夾(包括符號連結,所以要求效能的話用enumeratorAtPath)

        let subPaths = manager.subpaths(atPath: url.path)

        print("subPaths: \(subPaths)")

//        2,判斷檔案或資料夾是否存在

        let fileManager = FileManager.default

        let filePath:String = NSHomeDirectory() + "/Documents/hangge.txt"

        let exist = fileManager.fileExists(atPath: filePath)

//        3,建立資料夾

//        方式1:

        let myDirectory:String = NSHomeDirectory() + "/Documents/myFolder/Files"

        let fileManager = FileManager.default

//withIntermediateDirectories為ture表示路徑中間如果有不存在的資料夾都會建立

        try! fileManager.createDirectory(atPath: myDirectory,

                                         withIntermediateDirectories: true, attributes: nil)

//        方式2:

        func createFolder(name:String,baseUrl:NSURL){

            let manager = FileManager.default

            let folder = baseUrl.appendingPathComponent(name, isDirectory: true)

            print("資料夾: \(folder)")

            let exist = manager.fileExists(atPath: folder!.path)

            if !exist {

                try! manager.createDirectory(at: folder!, withIntermediateDirectories: true,

                                             attributes: nil)

            }

        }

//在文件目錄下新建folder目錄

        let manager = FileManager.default

        let urlForDocument = manager.urls(for: .documentDirectory, in: .userDomainMask)

        let url = urlForDocument[0] as NSURL

        createFolder(name: "folder", baseUrl: url)

//        4,將物件寫入檔案

//        可以通過write(to:)方法,可以建立檔案並將物件寫入,物件包括String,NSString,UIImage,NSArray,NSDictionary等。

//        (1)把String儲存到檔案

//

        let filePath:String = NSHomeDirectory() + "/Documents/hangge.txt"

        let info = "歡迎來到hange.com"

        try! info.write(toFile: filePath, atomically: true, encoding: String.Encoding.utf8)

//        (2)把圖片儲存到檔案路徑下

        let filePath = NSHomeDirectory() + "/Documents/hangge.png"

        let image = UIImage(named: "apple.png")

        let data:Data = UIImagePNGRepresentation(image!)!

        try? data.write(to: URL(fileURLWithPath: filePath))

//        (3)把NSArray儲存到檔案路徑下

        let array = NSArray(objects: "aaa","bbb","ccc")

        let filePath:String = NSHomeDirectory() + "/Documents/array.plist"

        array.write(toFile: filePath, atomically: true)

//        (4)把NSDictionary儲存到檔案路徑下

let dictionary:NSDictionary = ["Gold": "1st Place", "Silver": "2nd Place"]

letfilePath:String = NSHomeDirectory() + "/Documents/dictionary.plist"

        dictionary.write(toFile: filePath, atomically: true)

//        5,建立檔案

        func createFile(name:String, fileBaseUrl:URL){

            let manager = FileManager.default

            let file = fileBaseUrl.appendingPathComponent(name)

            print("檔案: \(file)")

            let exist = manager.fileExists(atPath: file.path)

            if !exist {

                let data = Data(base64Encoded:"aGVsbG8gd29ybGQ=" ,options:.ignoreUnknownCharacters)

                let createSuccess = manager.createFile(atPath: file.path,contents:data,attributes:nil)

                print("檔案建立結果: \(createSuccess)")

            }

        }

//在文件目錄下新建test.txt檔案

        let manager = FileManager.default

        let urlForDocument = manager.urls( for: .documentDirectory,

                                           in:.userDomainMask)

        let url = urlForDocument[0]

        createFile(name:"test.txt", fileBaseUrl: url)

//createFile(name: "folder/new.txt", fileBaseUrl: url)

//        6,複製檔案

//        (1)方法1

        let fileManager = FileManager.default

        let homeDirectory = NSHomeDirectory()

        let srcUrl = homeDirectory + "/Documents/hangge.txt"

        let toUrl = homeDirectory + "/Documents/copyed.txt"

        try! fileManager.copyItem(atPath: srcUrl, toPath: toUrl)

//        (2)方法2

// 定位到使用者文件目錄

        let manager = FileManager.default

        let urlForDocument = manager.urls( for:.documentDirectory, in:.userDomainMask)

        let url = urlForDocument[0]

// 將test.txt檔案拷貝到文件目錄根目錄下的copyed.txt檔案

        let srcUrl = url.appendingPathComponent("test.txt")

        let toUrl = url.appendingPathComponent("copyed.txt")

        try! manager.copyItem(at: srcUrl, to: toUrl)

//        7,移動檔案

//        (1)方法1

        let fileManager = FileManager.default

        let homeDirectory = NSHomeDirectory()

        let srcUrl = homeDirectory + "/Documents/hangge.txt"

        let toUrl = homeDirectory + "/Documents/moved/hangge.txt"

        try! fileManager.moveItem(atPath: srcUrl, toPath: toUrl)

//        (2)方法2

// 定位到使用者文件目錄

        let manager = FileManager.default

        let urlForDocument = manager.urls( for: .documentDirectory, in:.userDomainMask)

        let url = urlForDocument[0]

        let srcUrl = url.appendingPathComponent("test.txt")

        let toUrl = url.appendingPathComponent("copyed.txt")

// 移動srcUrl中的檔案(test.txt)到toUrl中(copyed.txt)

        try! manager.moveItem(at: srcUrl, to: toUrl)

// 8,刪除檔案

        1)方法1

        let fileManager = FileManager.default

        let homeDirectory = NSHomeDirectory()

        let srcUrl = homeDirectory + "/Documents/hangge.txt"

        try! fileManager.removeItem(atPath: srcUrl)

// (2)方法2

// 定位到使用者文件目錄

        let manager = FileManager.default

        let urlForDocument = manager.urls(for: .documentDirectory, in:.userDomainMask)

        let url = urlForDocument[0]

        let toUrl = url.appendingPathComponent("copyed.txt")

// 刪除文件根目錄下的toUrl路徑的檔案(copyed.txt檔案)

        try! manager.removeItem(at: toUrl)

// 9,刪除目錄下所有的檔案

//(1)方法1:獲取所有檔案,然後遍歷刪除

        let fileManager = FileManager.default

        let myDirectory = NSHomeDirectory() + "/Documents/Files"

        let fileArray = fileManager.subpaths(atPath: myDirectory)

        for fn in fileArray!{

            try! fileManager.removeItem(atPath: myDirectory + "/\(fn)")

        }

//(2)方法2:刪除目錄後重新建立該目錄

        let fileManager = FileManager.default

        let myDirectory = NSHomeDirectory() + "/Documents/Files"

        try! fileManager.removeItem(atPath: myDirectory)

        try! fileManager.createDirectory(atPath: myDirectory, withIntermediateDirectories: true,

                                         attributes: nil)

//  10,讀取檔案

        let manager = FileManager.default

        let urlsForDocDirectory = manager.urls(for: .documentDirectory, in:.userDomainMask)

        let docPath = urlsForDocDirectory[0]

        let file = docPath.appendingPathComponent("test.txt")

        //方法1

        let readHandler = try! FileHandle(forReadingFrom:file)

        let data = readHandler.readDataToEndOfFile()

        let readString = String(data: data, encoding: String.Encoding.utf8)

        print("檔案內容: \(readString)")

        //方法2

        let data2 = manager.contents(atPath: file.path)

        let readString2 = String(data: data2!, encoding: String.Encoding.utf8)

        print("檔案內容: \(readString2)")

//  11,在任意位置寫入資料

        let manager = FileManager.default

        let urlsForDocDirectory = manager.urls(for:.documentDirectory, in:.userDomainMask)

        let docPath = urlsForDocDirectory[0]

        let file = docPath.appendingPathComponent("test.txt")

        let string = "新增一些文字到檔案末尾"

        let appendedData = string.data(using: String.Encoding.utf8, allowLossyConversion: true)

        let writeHandler = try? FileHandle(forWritingTo:file)

        writeHandler!.seekToEndOfFile()

        writeHandler!.write(appendedData!)

// 12,檔案許可權判斷

        let manager = FileManager.default

        let urlForDocument = manager.urls(for: .documentDirectory, in:.userDomainMask)

        let docPath = urlForDocument[0]

        let file = docPath.appendingPathComponent("test.txt")

        let readable = manager.isReadableFile(atPath: file.path)

        print("可讀: \(readable)")

        let writeable = manager.isWritableFile(atPath: file.path)

        print("可寫: \(writeable)")

        let executable = manager.isExecutableFile(atPath: file.path)

        print("可執行: \(executable)")

        let deleteable = manager.isDeletableFile(atPath: file.path)

        print("可刪除: \(deleteable)")

//13,獲取檔案屬性(建立時間,修改時間,檔案大小,檔案型別等資訊)

        let manager = FileManager.default

        let urlForDocument = manager.urls(for: .documentDirectory, in:.userDomainMask)

        let docPath = urlForDocument[0]

        let file = docPath.appendingPathComponent("test.txt")

        let attributes = try? manager.attributesOfItem(atPath: file.path) //結果為Dictionary型別

        print("attributes: \(attributes!)")

//從 attributes 中獲取具體的屬性:

print("建立時間:\(attributes![FileAttributeKey.creationDate]!)")

print("修改時間:\(attributes![FileAttributeKey.modificationDate]!)")

        print("檔案大小:\(attributes![FileAttributeKey.size]!)")

// 14,檔案/資料夾比較

        let manager = FileManager.default

        let urlForDocument = manager.urls(for: .documentDirectory, in:.userDomainMask)

        let docPath = urlForDocument[0]

        let contents = try! manager.contentsOfDirectory(atPath: docPath.path)

//下面比較使用者文件中前面兩個檔案是否內容相同(該方法也可以用來比較目錄)

        let count = contents.count

        if count > 1 {

            let path1 = docPath.path + "/" + (contents[0] as String)

            let path2 = docPath.path + "/" + (contents[1] as String)

            let equal = manager.contentsEqual(atPath: path1,andPath:path2)

            print("path1:\(path1)")

            print("path2:\(path2)")

            print("比較結果: \(equal)")

        }

相關推薦

swiftFileManager操作

      1)首先我們獲取使用者文件目錄路徑        let manager = FileManager.default        let urlForDocument = manager.urls(for: .documentDirectory, in:.use

Swift呼叫OC檔案操作-NSBundle

//*************************************************** // //      >>>>>>>Swif

Jquery基礎DOM操作

nbsp 動態 下拉框 attr 格式 空元素 hasclass ren check Dom是Document Object Model的縮寫,意思是文檔對象模型。DOM是一種與瀏覽器、平臺、語言無關的接口,使用該接口可以輕松訪問頁面中所有的標準組件。DOM操作可以分為三個

python selenium 元素操作鍵盤操作(五)

兩個 .com multi 模擬 刪除 del escape comm f11 上節介紹了模擬鼠標對元素的操作,本節主要介紹鍵盤對元素的操作,實際過程中鼠標對元素的操作比鍵盤對元素的操作更經常使用,但是鍵盤對元素的操作也很重要,本節主要介紹一下鍵盤對元素的操作。 selen

Swift vm10虛擬機安裝Mac OS X10.10教程

darwin 以及 wwdc ont 虛擬機安裝 繼續 log 我的電腦 終極 VM10裝Mac OS X 10.9.3及更新到Mac OS X 10.10,讓你的windows也能玩Swift 。 近期WWDC放出終極大招——新的編程語言Swift(雨燕),導

Pythonre操作

字符串 開始 忽略 默認 group 使用 pytho 得到 sea 1.re.search():search返回的是查找結果的對象,可以使用group()或groups()方法得到匹配成功的字符串。   ①group()默認返回匹配成功的整個字符串(忽略pattern中的

Python學習筆記-數據報表Excel操作模塊

工作表 excel 字符串 python 利用Python操作Excel的模塊XlsxWriter,可以操作多個工作表的文字、數字、公式、圖表等。XlsxWriter模塊具有以下功能:100%兼容的Excel XLSX文件,支持Excel 2003、Excel 2007等版本;支持所有Ex

讀Zepto源碼樣式操作

blob repl dst sel ddc itl put append github上 這篇依然是跟 dom 相關的方法,側重點是操作樣式的方法。 讀Zepto源碼系列文章已經放到了github上,歡迎star: reading-zepto 源碼版本 本文閱讀的源碼為 z

Pythonstr操作

call file 引號 borde 小寫 cal 整數 不足 %u 1. str.format():使用“{}”占位符格式化字符串(占位符中的索引號形式和鍵值對形式可以混合使用)。 1 >>> string = ‘python{}, django{}

DjangoORM操作

cursors cap oot 查詢條件 other ddd pos 截取 one ORM基本增刪改查操作: 1 # 增 2 models.Tb1.objects.create(c1=‘xx‘, c2=‘oo‘) 增加一條數據,可以接受字典類型數據 **kwarg

linux驅動poll操作

node snippet 內存 ins 按鍵 服務 null head 隊列 POLL操作 1、POLL運行過程: poll是一個系統調用,其內核入口函數為sys_poll,sys_poll差點兒不做不論什麽處理直接調用do_sys_poll,do_sy

DOM操作CSS操作

規則 相關 dom操作 get ron insert selector lin 對象 操作行內樣式   寫法:元素節點.style     得到該元素節點的CSS樣式聲明對象;CSSStyleDeclaration     元素節點.style.樣式名

python字典操作

遍歷字典 愛好 wim ems values n) 刪除 color 列表 字典操作代碼如下: 1 #數據字典操作匯總 2 person = {‘name‘: ‘Mike‘, ‘age‘: 25} 3 print("初始的數據字典:", person) 4 5

Djangomodel操作(續)

class connect public _id hang 多少 datetime sub pan Django中的源碼續 ################################################## # PUBLIC METHODS THAT R

selenium登陸操作舉例

exec 4.3 指定 .whl 模擬 bsp ogr key 安裝 安裝selenium: python -m pip install selenium-3.4.3-py2.py3-none-any.whl 下載對應瀏覽器版本的驅動,且在環境變量PATH中指定驅動

vue.js操作(實例)

tex styles title oct lar per click 一個 lis 聽說大家都開始用react、vue這些MVVM框架了,為了不落後,還是學學吧!(之前只對angular了解一點,時間一長,也忘得差不多了,所以學習vue相當於從小白開始) 從vue.js官網

C語言復習2操作

位操作位操作 位操作是程序設計中對位模式按位或二進制數的一元和二元操作. 在許多古老的微處理器上, 位運算比加減運算略快, 通常位運算比乘除法運算要快很多. 在現代架構中, 情況並非如此:位運算的運算速度通常與加法運算相同(仍然快於乘法運算)。 位運算符 取反(~)是一元運算符, 對一個

swift as、as!、as?

ani pre 向下轉型 run 值類型 模式匹配 性問題 不同 派生類 1,as使用場合(1)從派生類轉換為基類,向上轉型(upcasts) 1 class Animal {} 2 class Cat: Animal {} 3 let cat = Cat() 4 le

JavaScriptdom操作

進行 ack 選擇器 ges ava 屬性 擴展 簡介 logs 一、簡介 文檔對象模型(Document Object Model,簡稱DOM),是W3C組織推薦的處理可擴展標誌語言的標準編程接口。DOM編程: DOM 是關於如何獲取、修改、添加或刪除 HTM

Elasticsearch基本操作

ubuntu quest del ubun 存儲 綠色 站點 ear doc elasticsearch是一個是開源的(Apache2協議),分布式的,RESTful的,構建在Apache Lucene之上的的搜索引擎。 它有很多特點例如Schema Free,Docume