詳解Go語言中io/ioutil工具的使用
學習筆記,寫到哪是哪。
接著上一篇,我們看看io/ioutil工具如何使用,簡化文件操作。
讀取文件
讀取文件可以使用ReadAll方法或者ReadFile方法。
ReadAll方法樣例代碼如下
//讀取文件ReadAll
func IoUtilRead1() {
_file, _e := os.Open("./test.txt")
if _e != nil {
fmt.Println(_e)
return
}
defer _file.Close()
_text, _err := ioutil.ReadAll(_file)
fmt.Println(_err)
fmt.Println(string(_text))
}
文件內(nèi)容和執(zhí)行結(jié)果如下

<nil>
今天天氣真好
Process finished with the exit code 0
ReadFile方法樣例代碼如下
//讀取文件ReadFile
func IoUtilRead2() {
_text, _err := ioutil.ReadFile("./test.txt")
fmt.Println(_err)
fmt.Println(string(_text))
}
執(zhí)行結(jié)果如下
<nil>
今天天氣真好
Process finished with the exit code 0
寫文件
可以使用ioutil.WriteFile方法寫文件。
樣例代碼如下
//寫文件
func IoUtilWriteFile() {
_err := ioutil.WriteFile("./test.txt", []byte("今天天氣真好"), os.ModePerm)
fmt.Println(_err)
}
注意方法還是要帶入文件權(quán)限參數(shù),文件如果不存在的話,會自動創(chuàng)建。但是不能追加文本內(nèi)容,還是要注意一下。
讀取文件夾下所有文件信息
可以使用ioutil.ReadDir方法讀取目錄下所有文件信息。
樣例代碼如下
//讀取文件夾下的文件
func IoUtilReadDir() {
fileInfoData, _err := ioutil.ReadDir(".")
if _err != nil {
fmt.Println(_err)
return
}
for k, v := range fileInfoData {
fmt.Printf("第%d個文件,名稱%s,目錄與否:%v\n", k, v.Name(), v.IsDir())
}
}
輸出文件編號、名稱、是否為目錄,執(zhí)行結(jié)果截圖如下

創(chuàng)建臨時文件和臨時文件夾
可以使用ioutil.TempFile和ioutil.TempDir來創(chuàng)建臨時文件和臨時文件夾。
樣例代碼如下
//創(chuàng)建臨時文件和文件夾
func IoUtilTemp() {
_file, _err := ioutil.TempFile(".", "test1.txt")
if _err != nil {
fmt.Println(_err)
return
}
defer _file.Close()
_n, _err1 := _file.WriteString("你是誰")
if _err1 != nil {
fmt.Println(_err1)
return
}
fmt.Printf("字符:%d", _n)
_dirName, _err2 := ioutil.TempDir(".", "output2")
if _err2 != nil {
fmt.Println(_err2)
return
}
fmt.Printf("臨時文件夾:%v\n", _dirName)
}
執(zhí)行結(jié)果如下截圖所示


臨時文件和臨時文件夾后面會帶一串隨機字符串。
拷貝文件
使用ioutil寫了一個拷貝方法。
樣例代碼如下
//拷貝文件
func IoUtilCopyFile(srcFile, distFile string) (int, error) {
_data, _err := ioutil.ReadFile(srcFile)
if _err != nil {
return 0, _err
}
_err = ioutil.WriteFile(distFile, _data, os.ModePerm)
if _err != nil {
return 0, _err
}
return len(_data), nil
}
func main() {
IoUtilCopyFile("test.txt", "test1.txt")
}
執(zhí)行結(jié)果如下

小結(jié)
總的來說,使用起來簡單了不少,里面有使用到string與[]byte的轉(zhuǎn)換,記錄一下別忘了。
//string和[]byte之間的轉(zhuǎn)換
func transforStringAndByte() {
var str string = "今天天氣真好"
data := []byte(str)
fmt.Println(len(data))
str1 := string(data[:])
fmt.Println(str1)
}以上就是詳解Go語言中io/ioutil工具的使用的詳細內(nèi)容,更多關(guān)于Go語言io/ioutil工具的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
詳解Golang利用反射reflect動態(tài)調(diào)用方法
這篇文章主要介紹了詳解Golang利用反射reflect動態(tài)調(diào)用方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2018-11-11
Golang中的new()和make()函數(shù)本質(zhì)區(qū)別
在 Go 語言開發(fā)中,new() 和 make() 是兩個容易讓開發(fā)者感到困惑的內(nèi)建函數(shù),盡管它們都用于內(nèi)存分配,但其設(shè)計目的、適用場景和底層實現(xiàn)存在本質(zhì)差異,本文將通過類型系統(tǒng)、內(nèi)存模型和編譯器實現(xiàn)三個維度,深入解析這兩個函數(shù)的本質(zhì)區(qū)別,感興趣的朋友一起看看吧2025-02-02

