Go 写入文件

Go将数据写入文件的方法和上面介绍过的读取文件的方法很类似。

  1. package main
  2. import (
  3. "bufio"
  4. "fmt"
  5. "io/ioutil"
  6. "os"
  7. )
  8. func check(e error) {
  9. if e != nil {
  10. panic(e)
  11. }
  12. }
  13. func main() {
  14. // 首先看一下如何将一个字符串写入文件
  15. d1 := []byte("hello\ngo\n")
  16. err := ioutil.WriteFile("/tmp/dat1", d1, 0644)
  17. check(err)
  18. // 为了实现细颗粒度的写入,打开文件后再写入
  19. f, err := os.Create("/tmp/dat2")
  20. check(err)
  21. // 在打开文件后通常应该立刻使用defer来调用
  22. // 打开文件的Close方法,以保证main函数结束
  23. // 后,文件关闭
  24. defer f.Close()
  25. // 你可以写入字节切片
  26. d2 := []byte{115, 111, 109, 101, 10}
  27. n2, err := f.Write(d2)
  28. check(err)
  29. fmt.Printf("wrote %d bytes\n", n2)
  30. // 也可以使用`WriteString`直接写入字符串
  31. n3, err := f.WriteString("writes\n")
  32. fmt.Printf("wrote %d bytes\n", n3)
  33. // 调用Sync方法来将缓冲区数据写入磁盘
  34. f.Sync()
  35. // `bufio`除了提供上面的缓冲读取数据外,还
  36. // 提供了缓冲写入数据的方法
  37. w := bufio.NewWriter(f)
  38. n4, err := w.WriteString("buffered\n")
  39. fmt.Printf("wrote %d bytes\n", n4)
  40. // 使用Flush方法确保所有缓冲区的数据写入底层writer
  41. w.Flush()
  42. }

运行结果

  1. wrote 5 bytes
  2. wrote 7 bytes
  3. wrote 9 bytes