package main import ( "bufio" "fmt" "io" "os" ) //寫 func WriteFile(path string) { //開啟檔案,新建檔案 f, err := os.Create(path) //傳遞檔案路徑 if err != nil { //有錯誤 fmt.Println("err = ", err) return } //使用完畢,需要關閉檔案 defer f.Close() var buf string for i := 0; i < 5; i++ { //"i = 1\n", 這個字串儲存在buf中 buf = fmt.Sprintf("i = %d\n", i) //fmt.Println("buf = ", buf) n, err := f.WriteString(buf) if err != nil { fmt.Println("err = ", err) } fmt.Println("n = ", n) } } //讀檔案內容方法 func ReadFile(path string) { //開啟檔案 f, err := os.Open(path) if err != nil { fmt.Println("err = ", err) return } //關閉檔案 defer f.Close() buf := make([]byte, 1024*2) //2k大小 //n代表從檔案讀取內容的長度 n, err1 := f.Read(buf) if err1 != nil && err1 != io.EOF { //檔案出錯,同時沒有到結尾 fmt.Println("err1 = ", err1) return } fmt.Println("buf = ", string(buf[:n])) } //每次讀取一行 func ReadFileLine(path string) { //開啟檔案 f, err := os.Open(path) if err != nil { fmt.Println("err = ", err) return } //關閉檔案 defer f.Close() //新建一個緩衝區,把內容先放在緩衝區 r := bufio.NewReader(f) for { //遇到'\n'結束讀取, 但是'\n'也讀取進入 buf, err := r.ReadBytes('\n') if err != nil { if err == io.EOF { //檔案已經結束 break } fmt.Println("err = ", err) } fmt.Printf("buf = #%s#\n", string(buf)) } } func main() { path := "./demo.txt" //路徑檔案 WriteFile(path) //寫內容 ReadFile(path) //讀內容 ReadFileLine(path) //每次讀取一行 }