打开和关闭文件

os.Open()函数能够打开一个文件,返回一个*File和一个err。对得到的文件实例调用close()方法能够关闭文件。

  1. package main
  2. import (
  3. "fmt"
  4. "os"
  5. )
  6. func main() {
  7. //打开文件
  8. f,err := os.Open("D:\\code\\gopath\\gowenjian\\go_jichu\\file")
  9. if err !=nil {
  10. fmt.Println("打开文件失败")
  11. return
  12. }else {
  13. //关闭文件
  14. f.Close()
  15. }
  16. }

读取文件

bufio读取文件

  1. package main
  2. import (
  3. "bufio"
  4. "fmt"
  5. "io"
  6. "os"
  7. )
  8. func main() {
  9. f,err := os.Open("D:\\code\\gopath\\gowenjian\\go_jichu\\day3\\file\\a.txt")
  10. if err !=nil {
  11. fmt.Println("打开文件失败")
  12. return
  13. }
  14. reader := bufio.NewReader(f)
  15. for {
  16. line,err := reader.ReadString('\n')
  17. if err == io.EOF {
  18. fmt.Print(line)
  19. fmt.Println("读取文件w完毕")
  20. return
  21. }
  22. if err != nil {
  23. fmt.Println("读取文件失败")
  24. return
  25. }
  26. fmt.Print(line)
  27. }
  28. }

ioutil读取整个文件

  1. package main
  2. import (
  3. "fmt"
  4. "io/ioutil"
  5. )
  6. func main() {
  7. reader,err := ioutil.ReadFile("D:\\code\\gopath\\gowenjian\\go_jichu\\day3\\file\\a.txt")
  8. if err !=nil {
  9. fmt.Println("打开文件失败")
  10. return
  11. }
  12. fmt.Println(string(reader))
  13. }

文件写入操作

os.OpenFile()函数能够以指定模式打开文件,从而实现文件写入相关功能。

  1. func OpenFile(name string, flag int, perm FileMode) (*File, error) {
  2. ...
  3. }

其中:
name:要打开的文件名 flag:打开文件的模式。 模式有以下几种:

模式 含义
os.O_WRONLY 只写
os.O_CREATE 创建文件
os.O_RDONLY 只读
os.O_RDWR 读写
os.O_TRUNC 清空
os.O_APPEND 追加

perm:文件权限,一个八进制数。r(读)04,w(写)02,x(执行)01。

Write和WriteString

  1. package main
  2. import (
  3. "fmt"
  4. "os"
  5. )
  6. func main() {
  7. f,err := os.OpenFile("D:\\code\\gopath\\gowenjian\\go_jichu\\day3\\file\\b.txt",os.O_CREATE|os.O_APPEND,0755)
  8. if err != nil {
  9. fmt.Println("open file failed",err)
  10. return
  11. }
  12. defer f.Close()
  13. str := "1111"
  14. f.Write([]byte(str)) //写入字节切片数据
  15. f.WriteString(str) //直接写入字符串数据
  16. }

bufio.NewWriter

  1. package main
  2. import (
  3. "bufio"
  4. "fmt"
  5. "os"
  6. )
  7. func main() {
  8. f,err := os.OpenFile("D:\\code\\gopath\\gowenjian\\go_jichu\\day3\\file\\b.txt",os.O_CREATE|os.O_APPEND,0755)
  9. if err != nil {
  10. fmt.Println("open file failed",err)
  11. return
  12. }
  13. defer f.Close()
  14. w := bufio.NewWriter(f)
  15. for i:=0 ; i<10 ; i++ {
  16. w.WriteString("hello") //将数据先写入缓存
  17. }
  18. w.Flush() //将缓存中的内容写入文件
  19. }

ioutil.WriteFile

  1. func main() {
  2. str := "hello 沙河"
  3. err := ioutil.WriteFile("./xx.txt", []byte(str), 0666)
  4. if err != nil {
  5. fmt.Println("write file failed, err:", err)
  6. return
  7. }
  8. }