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