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
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
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)")
}
相關推薦
swift之FileManager的操作
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(雨燕),導
Python之re操作
字符串 開始 忽略 默認 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
Python之str操作
call file 引號 borde 小寫 cal 整數 不足 %u 1. str.format():使用“{}”占位符格式化字符串(占位符中的索引號形式和鍵值對形式可以混合使用)。 1 >>> string = ‘python{}, django{}
Django之ORM操作
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
Django之model操作(續)
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
JavaScript之dom操作
進行 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