接續昨天的文章,來介紹File
跟FileUtils
# 參數前三個最常用的,如果是新增檔案,不管哪個變數都沒差。注意! 變數是必須
"w" : 若有檔案則打開原檔,清空內容,從頭開始寫入。
"a" : 若有檔案則打開原檔,將內容加在最後面。
"r" : 若有檔案則打開原檔,將內容加在最前面。
"r+": 讀取 / 寫入,不會主動建檔,將內容加在檔案最前面,會覆蓋原有內容,檔案必須存在)
"w+": 讀取 / 寫入。同 w 功能
"a+": 讀取 / 寫入。同 a 功能
在每個模式後面加上"b" #例如 "rb" 或 "rb+",就可以開啟「二進位」模式
File.new('檔名','參數')
file = File.new('test.txt', 'w') # => #<File:test.txt>
成功在當前目錄產生
拿剛才的檔案file
繼續使用
file.write("鐵人賽第九天\n主體是:檔案操作") # 寫入內容
file.close # 關閉檔案。若不關閉剛才寫入的內容不會被存起來
鐵人賽第九天
主體是:檔案操作
file = File.open('test.txt', 'r+') # 開啟檔案
file.read # 讀取檔案,回傳: "鐵人賽第九天\n主體是:檔案操作"
file.close # 操作結束一定要關閉檔案
現在相同資料夾內還有一個test.json
檔案
內容是{"date": "2019/9/24"}
就可以把test.json
內容寫入test.txt
content = File.read("test.json") #先讀取`test.json`的內容
object = JSON.parse(content) #解析json
File.open("test.txt", "a") { |file|
file.write("\n" + "Today is: " + object["date"] )
} # "a"是打開檔案後把內容加在最後面
鐵人賽第九天
主體是:檔案操作
Today is: 2019/9/24
File.open("test.txt", "a") { |file| file.write("Today is: " + object["date"] + "\n") }
File.open("test.txt", "a") { |file| file.write("Today is: " + object["date"] + "\n") }
File.open("test.txt", "a") { |file| file.write("Today is: " + object["date"] + "\n") }
File.open("test.txt", "a") { |file| file.write("Today is: " + object["date"] + "\n") }
鐵人賽第九天
主體是:檔案操作
Today is: 2019/9/24
Today is: 2019/9/24
Today is: 2019/9/24
Today is: 2019/9/24
Today is: 2019/9/24
File.exist?('test.json') # => true
File.size('test.json') # => 26
File.rename('test.json', 'new_test.json')
File.delete('test.txt') # => 1
File.expand_path("test.json")
# => "/Users/maxhuang/Desktop/Todolist/test.json"
File.read
vs. File.open
(都要給絕對路徑)File.read
把檔案內容讀取轉成字串,就算圖片九空.png
也一樣(所以上面才可以用JSON.parse(content))
photo_file = File.read("九空.png")
# => "\x89PNG\r\n\u001A\n....很長...中略.....\xAEB`\x82"
File.open
是傳回一個檔案
#相對路徑
photo_file = File.open("九空.png")
# => #<File:九空.png>
#絕對路徑
photo_file = File.open("/Users/maxhuang/Desktop/Todolist/九空.png")
# => #<File:/Users/maxhuang/Desktop/Todolist/九空.png>
open-use-close
,否則會有memory leak
為什麼一定要關閉檔案?
你打開了一個檔案編輯,結果卻沒有把他關閉的話,他就會一直處於開啟狀態,占用硬體資源,buffer(暫存區)也不會清空。所以很多程式語言都會希望使用者關掉不用的檔案,我也被公司的高手提醒過(汗...)
另外,Ruby 的 File.open 如果有給block,會自動把file做close
但在一般狀態下,如果有file.write,file.close 是必須的
總算介紹完File
了,下面的FileUtils
就更簡單了
FileUtils
是Ruby的Module,用做資料夾或檔案的新增,複製,移動,刪除
此目錄不存在才建立新資料夾
FileUtils.mkdir_p "#{Rails.root}/log/2019log"
# => ["/Users/maxhuang/Desktop/Todolist/log/2019log"]
FileUtils.rm_rf "#{Rails.root}/log/2019log"
# => ["/Users/maxhuang/Desktop/Todolist/log/2019log"]
剛才建立的 2019log
資料夾就被刪除了
FileUtils.rm "新九空.png" if File.exist?("新九空.png")
# 如果刪除不存在的檔案會噴錯 Errno::ENOENT (No such file or directory @ apply2files - text.json)
FileUtils.copy_entry("tmp", "new_dir")
產生new_dir
資料夾,內容與tmp
資料夾完全相同
FileUtils.mv('test.rb', 'tmp/')
test.rb
就被移到tmp
資料夾底下
FileUtils.cp 'test.rb', 'tmp'
test.rb
就被複製到tmp
資料夾
一邊上班一邊寫文真低累啊
佩服那些文章質量俱佳的前輩
今天改完文章已經快一點了(இдஇ; )
睡...