文件读写

在golang的标准库中有三个包可以读写文件osioutilbufioos是最基础文件操作功能,ioutil提供读写小文件的简便功能,bufio提供带缓存的区高性能读写功能。

使用io包读取写文件

f, err := os.OpenFile("a.txt", os.O_CREATE|os.O_RDWR|os.O_APPEND, 0755) //文件不存在会创建 写文件会追加在末尾 if err != nil { log.Fatal(err) } f.Write([]byte("aaaa")) f.WriteString("bbbb") f.Close() //打开成功的文件句柄 不用的时候一定记得关闭 ff, err := os.OpenFile("a.txt", os.O_CREATE|os.O_RDWR|os.O_APPEND, 0755) b := make([]byte, 1024) n, err := ff.Read(b) if err != nil { log.Fatal(err) } fmt.Println(string(b[:n])) //aaaabbbb os.Remove("a.txt") //删除文件 f.Close()

使用ioutil包读写文件

ioutil包的ReadAllReadFile方法可以读取整个文件的内容到内存,对读取配置文件等小文件非常方便。

读文件

f, _ := os.Open("aa.txt") b, _ := ioutil.ReadAll(f) fmt.Println(string(b)) f.Close() b, _ = ioutil.ReadFile("aa.txt") fmt.Println(string(b))

对于大文件读取需要使用bufio包。

写文件

ioutil.WriteFile("aa.txt", []byte("aaaaa\nbbbbb\n"), 0666)

ioutil.WriteFile写文件会覆盖原先所有内容。

bufio读写文件

使用bufio按行读取文件

f, _ := os.Open("aa.txt") defer f.Close() buf := bufio.NewReader(f) for { line, _, err := buf.ReadLine() if err != nil { break } fmt.Println(string(line)) }

使用bufio写文件

f, _ := os.OpenFile("aa.txt", os.O_APPEND, 0755) //追加方式写文件 defer f.Close() w := bufio.NewWriter(f) w.Write([]byte("aaa\n")) w.WriteString("bbb\n")