Go 学习笔记(49)— Go 标准库之 io/ioutil(读写文件、获取目录下的文件和子目录、创建临时目录和文件)
1. 簡要概述
import "io/ioutil"
包 io/ioutil 實現(xiàn)一些 I/O 實用程序函數(shù)。
2. 相關函數(shù)
2.1 func ReadAll
func ReadAll(r io.Reader) ([]byte, error)
ReadAll 從 r 讀取數(shù)據(jù)直到 EOF 或遇到 error ,返回讀取的數(shù)據(jù)和遇到的錯誤。成功的調(diào)用返回的 err 為 nil 而非 EOF 。因為本函數(shù)定義為讀取 r 直到 EOF ,它不會將讀取返回的 EOF 視為應報告的錯誤。
2.2 func ReadFile
func ReadFile(filename string) ([]byte, error)
ReadFile 從 filename 指定的文件中讀取數(shù)據(jù)并返回文件的內(nèi)容。成功的調(diào)用返回的 err 為 nil 而非 EOF 。因為本函數(shù)定義為讀取整個文件,它不會將讀取返回的 EOF 視為應報告的錯誤。
2.3 func WriteFile
func WriteFile(filename string, data []byte, perm os.FileMode) error
函數(shù)向 filename 指定的文件中寫入數(shù)據(jù)。如果文件不存在將按給出的權限創(chuàng)建文件,否則在寫入數(shù)據(jù)之前清空文件。
在 UNIX 型系統(tǒng)中, 文件的默認權限為 0644 ,即所有者能夠讀取和寫入,而其他人只能讀取。
2.4 func ReadDir
func ReadDir(dirname string) ([]os.FileInfo, error)
返回 dirname 指定的目錄的目錄信息的有序列表。包含如下信息。
Name:文件的名稱。Size:文件的長度, 單位為宇節(jié)。Mode: 用二進制位表示的權限。ModTime:文件最后一個被修改的時間。IsDir:文件是否是目錄。Sys:底層數(shù)據(jù)源。
2.5 func TempDir
func TempDir(dir, prefix string) (name string, err error)
在 dir 目錄里創(chuàng)建一個新的、使用 prfix 作為前綴的臨時文件夾,并返回文件夾的路徑。如果 dir 是空字符串, TempDir 使用默認用于臨時文件的目錄(參見 os.TempDir 函數(shù))。 不同程序同時調(diào)用該函數(shù)會創(chuàng)建不同的臨時目錄,調(diào)用本函數(shù)的程序有責任在不需要臨時文件夾時摧毀它。
2.6 func TempFile
func TempFile(dir, prefix string) (f *os.File, err error)
在 dir 目錄下創(chuàng)建一個新的、使用 prefix 為前綴的臨時文件,以讀寫模式打開該文件并返回 os.File 指針。如果 dir 是空字符串, TempFile 使用默認用于臨時文件的目錄(參見 os.TempDir 函數(shù))。不同程序同時調(diào)用該函數(shù)會創(chuàng)建不同的臨時文件,調(diào)用本函數(shù)的程序有責任在不需要臨時文件時摧毀它。
2.7 復制文件
ioutil 包可用于執(zhí)行一些常見的文件處理操作,但要執(zhí)行更復雜的操作,應使用 os 包。os 包運行在稍低的層級,因此使用它時,必須手工關閉打開的文件。如果您閱讀 os 包的源代碼,將發(fā)現(xiàn) ioutil 包中的很多函數(shù)都是 os 包包裝器,您無須顯式地關閉文件。
func main() {src, err := os.Open("./example05.txt")if err != nil {fmt.Println(err)}defer src.Close()/*使用函數(shù) OpenFile 打開文件。第一個參數(shù)是要打開(如果不存在, 就創(chuàng)建)的文件的名稱; 第二個參數(shù)是用于文件的標志,在這里指定的是讀寫文件, 并在文件不存在時創(chuàng)建它; 最后一個參數(shù)設置文件的權限。*/dst, err := os.OpenFile("./example OS.copy.txt ", os.O_RDWR|os.O_CREATE, 0644)if err != nil {fmt.Println(err)}defer dst.Close()_, err = io.Copy(dst, src)if err != nil {fmt.Println(err)}
}
3. 代碼示例
package mainimport ("fmt""io/ioutil""os""strings"
)func main() {r := strings.NewReader("hello world")// ReadAll 讀取 io.Reader 對象的所有數(shù)據(jù),返回讀取內(nèi)容和錯誤allContents, err := ioutil.ReadAll(r)if err != nil {fmt.Println("ReadAll failed")}fmt.Printf("allContents is %#v\n", string(allContents))// ReadFile 讀取文件內(nèi)容 ,返回讀取內(nèi)容和錯誤testFile := "/home/wohu/GoCode/src/task/test.txt"txtContent, err := ioutil.ReadFile(testFile)if err != nil {fmt.Println("ReadFile failed")}fmt.Printf("txtContent is %#v\n", string(txtContent))// WriteFile 讀取文本文件內(nèi)容,返回錯誤err = ioutil.WriteFile(testFile, []byte("大漠孤煙直"), 0755)if err != nil {fmt.Println("WriteFile failed")}// ReadDir 讀取某個目錄下所有的文件或者目錄列表fileInfos, err := ioutil.ReadDir("./src/task")if err != nil {fmt.Println("ReadDir failed")}fmt.Printf("ReadDir is %#v\n", fileInfos)for _, fd := range fileInfos {fmt.Printf("file or dir is %#v, it's dir: %#v\n", fd.Name(), fd.IsDir())}// TempDir 創(chuàng)建臨時目錄tempDir, err := ioutil.TempDir("./src/task/", "temp")if err != nil {fmt.Println("TempDir failed")}fmt.Printf("tempDir is %#v\n", tempDir)// TempFile 創(chuàng)建臨時目錄tempFile, err := ioutil.TempFile("./src/task/", "temp")if err != nil {fmt.Println("TempDir failed")}tempFileName := tempFile.Name()fmt.Printf("tempFile is %#v\n", tempFile)fmt.Printf("tempFileName is %#v\n", tempFileName)defer os.RemoveAll(tempDir) // 刪除創(chuàng)建的臨時目錄defer os.RemoveAll(tempFileName) // 刪除創(chuàng)建的臨時文件
}
總結(jié)
以上是生活随笔為你收集整理的Go 学习笔记(49)— Go 标准库之 io/ioutil(读写文件、获取目录下的文件和子目录、创建临时目录和文件)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 做白带常规检查需要多少钱?
- 下一篇: 1980年猴票是谁画的啊?